diff options
author | flavio <fdanesse@gmail.com> | 2012-09-27 00:50:49 (GMT) |
---|---|---|
committer | flavio <fdanesse@gmail.com> | 2012-09-27 00:50:49 (GMT) |
commit | 5ebb52e58b0ead1b85b8c05d3c42ca4a6d2ba7f9 (patch) | |
tree | 7c56f57cfe811929fdf7ba19f927342caf1b90b2 | |
parent | 69c5c160de97bff9b456383f40b046f88efe1658 (diff) |
Starting Port to GTK3 and Fixing errors.
-rw-r--r-- | activity/activity.info | 2 | ||||
-rw-r--r--[-rwxr-xr-x] | imagethumbnail.py | 327 | ||||
-rw-r--r--[-rwxr-xr-x] | setup.py | 2 |
3 files changed, 198 insertions, 133 deletions
diff --git a/activity/activity.info b/activity/activity.info index 09a1c9d..5f96730 100644 --- a/activity/activity.info +++ b/activity/activity.info @@ -4,6 +4,6 @@ bundle_id = org.laptop.ImageThumbnail icon = imageviewer exec = sugar-activity imagethumbnail.ImageThumbnail show_launcher = yes -activity_version = 7 +activity_version = 8 mime_types = image/bmp;image/gif;image/jpeg;image/png;image/tiff license = GPLv2+ diff --git a/imagethumbnail.py b/imagethumbnail.py index 6f5746b..bdeffa8 100755..100644 --- a/imagethumbnail.py +++ b/imagethumbnail.py @@ -20,21 +20,29 @@ import os import sys -import gtk import logging -import pango import zipfile import time import traceback -import gobject from subprocess import Popen, PIPE -from glib import GError +import gi +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import GObject +from gi.repository import Pango +from gi.repository import GdkPixbuf -from sugar import mime -from sugar.activity import activity -from sugar.datastore import datastore -from sugar.graphics import style +#from glib import GError + +from sugar3 import mime +from sugar3.activity import activity +from sugar3.datastore import datastore +from sugar3.graphics import style +from sugar3.graphics.toolbarbox import ToolbarBox +from sugar3.activity.widgets import ActivityButton +from sugar3.activity.widgets import TitleEntry +from sugar3.activity.widgets import StopButton from gettext import gettext as _ @@ -60,16 +68,17 @@ class ImageThumbnail(activity.Activity): self.selected_journal_entry = None self.selected_path = None - self.canvas = gtk.Notebook() + self.canvas = Gtk.Notebook() self.canvas.props.show_border = True self.canvas.props.show_tabs = True self.canvas.show() self.last_col=0 cols=3 - ds_mounts = datastore.mounts() + # FIXME: module object has no attribute mounts + #ds_mounts = datastore.mounts() #check if externmal media used in journal - if len(ds_mounts)==1 and ds_mounts[0]['id']==1:cols=4 + #if len(ds_mounts)==1 and ds_mounts[0]['id']==1:cols=4 self.ls_journal=[] self.tv_journal=[] @@ -86,42 +95,44 @@ class ImageThumbnail(activity.Activity): for col in range(cols): - self.ls_journal.append( gtk.ListStore(gobject.TYPE_STRING, - gobject.TYPE_UINT64, - gobject.TYPE_STRING, - gobject.TYPE_PYOBJECT)) + self.ls_journal.append( Gtk.ListStore(GObject.TYPE_STRING, + GObject.TYPE_UINT64, + GObject.TYPE_STRING, + GObject.TYPE_PYOBJECT)) - self.tv_journal.append( gtk.TreeView(self.ls_journal[col])) + self.tv_journal.append( Gtk.TreeView(self.ls_journal[col])) self.tv_journal[col].set_rules_hint(True) self.tv_journal[col].set_search_column(COLUMN_TITLE) - renderer = gtk.CellRendererText() - renderer.set_property('wrap-mode', gtk.WRAP_WORD) + renderer = Gtk.CellRendererText() + renderer.set_property('wrap-mode', Gtk.WrapMode.WORD) renderer.set_property('wrap-width', 500) renderer.set_property('width', 500) - self.col_journal.append(gtk.TreeViewColumn(_('Title'), renderer, - text=COLUMN_TITLE)) + self.col_journal.append(Gtk.TreeViewColumn(_('Title'), + renderer, text = COLUMN_TITLE)) self.col_journal[col].set_sort_column_id(COLUMN_MTIME) self.tv_journal[col].append_column(self.col_journal[col]) - label_attributes = pango.AttrList() - label_attributes.insert(pango.AttrSize(14000, 0, -1)) - label_attributes.insert(pango.AttrForeground(65535, 65535, 65535, 0, -1)) + # FIXME: have to change everything about pango + # label_attributes = Pango.AttrList() + # label_attributes.insert(Pango.AttrSize(14000, 0, -1)) + # label_attributes.insert(Pango.AttrForeground(65535, 65535, 65535, 0, -1)) if col==0: - self.tab_label.append(gtk.Label(_("Journal"))) + self.tab_label.append(Gtk.Label(_("Journal"))) elif col==1: - self.tab_label.append(gtk.Label(_("Files"))) + self.tab_label.append(Gtk.Label(_("Files"))) elif (cols==4 and col==2): - self.tab_label.append(gtk.Label(_("External"))) + self.tab_label.append(Gtk.Label(_("External"))) else: - self.tab_label.append(gtk.Label(_("Read Only"))) - - self.tab_label[col].set_attributes(label_attributes) + self.tab_label.append(Gtk.Label(_("Read Only"))) + + # FIXME: have to change everything about pango + #self.tab_label[col].set_attributes(label_attributes) #self.tab_label[col].show() #self.tv_journal[col].show() if col==0:self.load_journal_table(col) @@ -131,9 +142,9 @@ class ImageThumbnail(activity.Activity): if num==0: #dummy elements for no external files - self.column_table.append( gtk.Table(1,1, homogeneous=False)) - self.scroll.append(gtk.ScrolledWindow(hadjustment=None, vadjustment=None)) - self.vbox.append(gtk.VBox(homogeneous=True, spacing=5)) + self.column_table.append( Gtk.Table(1,1, homogeneous=False)) + self.scroll.append(Gtk.ScrolledWindow(hadjustment=None, vadjustment=None)) + self.vbox.append(Gtk.VBox(homogeneous=True, spacing=5)) self.canvas.append_page(self.vbox[col],self.tab_label[col]) self.tab_label[col].hide() self.vbox[col].hide() @@ -143,9 +154,9 @@ class ImageThumbnail(activity.Activity): self.tab_label[col].show() self.tv_journal[col].show() - self.column_table.append( gtk.Table(rows=num, columns=3, homogeneous=False)) - self.scroll.append(gtk.ScrolledWindow( hadjustment=None, vadjustment=None)) - self.scroll[col].set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.column_table.append( Gtk.Table(rows=num, columns=3, homogeneous=False)) + self.scroll.append(Gtk.ScrolledWindow( hadjustment=None, vadjustment=None)) + self.scroll[col].set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) iter = self.ls_journal[col].get_iter_first() n=0 @@ -158,33 +169,44 @@ class ImageThumbnail(activity.Activity): i=n-(3*int(n/3)) j=2*int(n/3) - image_table = gtk.Table(rows=2, columns=2, homogeneous=False) + image_table = Gtk.Table(rows=2, columns=2, homogeneous=False) - self.image[col].append( gtk.Image()) - image_table.attach(self.image[col][n], 0, 2, 0, 1, xoptions=gtk.FILL|gtk.SHRINK, - yoptions=gtk.FILL|gtk.SHRINK, xpadding=5, ypadding=5) - self.btn_show[col].append(gtk.Button(_("Show File"))) + self.image[col].append( Gtk.Image()) + image_table.attach(self.image[col][n], 0, 2, 0, 1, + xoptions = Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK, + xpadding=5, ypadding=5) + + self.btn_show[col].append(Gtk.Button(_("Show File"))) self.btn_show[col][n].connect('button_press_event', self.show_button_press_event_cb, col,n) - image_table.attach(self.btn_show[col][n], 0,1, 1, 2, xoptions=gtk.SHRINK, - yoptions=gtk.SHRINK, xpadding=5, ypadding=5) + + image_table.attach(self.btn_show[col][n], 0, 1, 1, 2, + xoptions = Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.SHRINK, + xpadding = 5, ypadding = 5) self.btn_show[col][n].show() if col<cols-1: - self.btn_delete[col].append(gtk.Button(_("Delete"))) + self.btn_delete[col].append(Gtk.Button(_("Delete"))) self.btn_delete[col][n].connect('button_press_event', self.delete_button_press_event_cb, col,n) - image_table.attach(self.btn_delete[col][n], 1, 2, 1, 2, xoptions=gtk.SHRINK, - yoptions=gtk.SHRINK, xpadding=5, ypadding=5) + + image_table.attach(self.btn_delete[col][n], 1, 2, 1, 2, + xoptions = Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.SHRINK, + xpadding = 5, ypadding = 5) self.btn_delete[col][n].show() self.btn_delete[col][n].props.sensitive = True image_table.show() - self.column_table[col].attach(image_table, i,i+1, j+1,j+2, - xoptions=gtk.FILL|gtk.EXPAND|gtk.SHRINK, - yoptions=gtk.FILL|gtk.EXPAND|gtk.SHRINK, - xpadding=5, ypadding=5) + self.column_table[col].attach(image_table, i, i+1, j+1, j+2, + xoptions = Gtk.AttachOptions.FILL | + Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND | + Gtk.AttachOptions.SHRINK, xpadding = 5, ypadding = 5) + self.set_form_fields(jobject,col,n) self.btn_show[col][n].props.sensitive = True @@ -192,28 +214,34 @@ class ImageThumbnail(activity.Activity): n+=1 self.scroll[col].add_with_viewport(self.column_table[col]) - self.scroll[col].set_events(gtk.gdk.POINTER_MOTION_MASK) + self.scroll[col].set_events(Gdk.EventMask.POINTER_MOTION_MASK) self.scroll[col].show() - self.vbox.append(gtk.VBox(homogeneous=True, spacing=5)) - self.vbox[col].pack_start(self.scroll[col]) - self.canvas.append_page(self.vbox[col], self.tab_label[col]) + self.vbox.append(Gtk.VBox(homogeneous=True, spacing=5)) + self.vbox[col].pack_start(self.scroll[col], True, True, 0) + self.canvas.append_page(self.vbox[col], self.tab_label[col]) - self.tab_label.append(gtk.Label(_("File Viewer"))) - self.tab_label[cols].set_attributes(label_attributes) + self.tab_label.append(Gtk.Label(_("File Viewer"))) + # FIXME: have to change everything about pango + #self.tab_label[cols].set_attributes(label_attributes) self.tab_label[cols].show() self.vbox_view=self.draw_metatable(cols) - self.canvas.append_page(self.vbox_view, self.tab_label[cols]) + self.canvas.append_page(self.vbox_view, self.tab_label[cols]) self.set_canvas(self.canvas) self.show_all() self.vbox_view.hide() self.tab_label[cols].hide() - toolbox = activity.ActivityToolbox(self) - activity_toolbar = toolbox.get_activity_toolbar() - activity_toolbar.keep.props.visible = False - activity_toolbar.share.props.visible = False - self.set_toolbox(toolbox) - toolbox.show() + + toolbar_box = ToolbarBox() + self.set_toolbar_box(toolbar_box) + toolbar_box.toolbar.insert(TitleEntry(self), -1) + separator = Gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_expand(True) + toolbar_box.toolbar.insert(separator, -1) + + toolbar_box.toolbar.insert(StopButton(self), -1) + toolbar_box.show_all() for n in self.hidden: self.tab_label[n].hide() @@ -223,15 +251,15 @@ class ImageThumbnail(activity.Activity): def motion_notify_event(self,widget,event,col): self.tv_journal[col].show() - self.scroll[col]= gtk.ScrolledWindow( + self.scroll[col]= Gtk.ScrolledWindow( hadjustment=None, vadjustment=None) - self.scroll[col].set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.scroll[col].set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.menu_file() self.scroll[col].show() - self.vbox[col] = gtk.VBox(homogeneous=True, spacing=5) - self.vbox[col].pack_start(self.scroll[col]) + self.vbox[col] = Gtk.VBox(homogeneous=True, spacing=5) + self.vbox[col].pack_start(self.scroll[col], True, True, 0) - widget.append_page(sef.vbox[col], self.tab_label[col]) + widget.append_page(sef.vbox[col], self.tab_label[col]) widget.show() #reload @@ -245,89 +273,121 @@ class ImageThumbnail(activity.Activity): def draw_metatable(self, col): - self._secondary_view = gtk.VBox() - self.detail_view = gtk.Table(5,5, homogeneous= False) - go_back=gtk.Button(_("back")) + self._secondary_view = Gtk.VBox() + self.detail_view = Gtk.Table(5,5, homogeneous= False) + go_back=Gtk.Button(_("back")) go_back.connect('button_press_event', self._go_back_clicked_cb, col) go_back.show() - self.detail_view.attach(go_back,0,1,0,1,xoptions=gtk.FILL|gtk.SHRINK, - yoptions=gtk.FILL|gtk.SHRINK, xpadding=5, ypadding=5) + self.detail_view.attach(go_back, 0, 1, 0, 1, + xoptions = Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK, + xpadding = 5, ypadding = 5) + #image - self.large_image=gtk.Image() - self.detail_view.attach(self.large_image,0,3,1,5,xoptions=gtk.FILL|gtk.SHRINK, - yoptions=gtk.FILL|gtk.SHRINK, xpadding=5, ypadding=5) + self.large_image=Gtk.Image() + self.detail_view.attach(self.large_image, 0, 3, 1, 5, + xoptions = Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK, + xpadding = 5, ypadding = 5) + + self.detail_view.attach(self.large_image,0,3,1,5) + self.large_image.show() #filename - title_label = gtk.Label(_("Title")) - self.detail_view.attach(title_label, 3,4, 0, 1, - xoptions=gtk.SHRINK, - yoptions=gtk.SHRINK, - xpadding=10, ypadding=10) + title_label = Gtk.Label(_("Title")) + + self.detail_view.attach(title_label, 3, 4, 0, 1, + xoptions = Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.SHRINK, + xpadding = 10, ypadding = 10) + title_label.show() - self.title_textview = gtk.TextView() - self.title_textview.set_wrap_mode(gtk.WRAP_WORD) - self.detail_view.attach(self.title_textview, 4,5, 0, 1, - xoptions=gtk.EXPAND|gtk.FILL|gtk.SHRINK, - yoptions=gtk.EXPAND|gtk.FILL|gtk.SHRINK, - xpadding=10, ypadding=10) + self.title_textview = Gtk.TextView() + self.title_textview.set_wrap_mode(Gtk.WrapMode.WORD) + + self.detail_view.attach(self.title_textview, 4, 5, 0, 1, + xoptions = Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL | + Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.EXPAND | + Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK, + xpadding = 10, ypadding = 10) + self.title_textview.props.accepts_tab = False self.title_textview.show() #filepath - description_label = gtk.Label(_("Description")) - self.detail_view.attach(description_label, 3,4, 1, 2, - xoptions=gtk.SHRINK, - yoptions=gtk.SHRINK, - xpadding=10, ypadding=10) + description_label = Gtk.Label(_("Description")) + + self.detail_view.attach(description_label, 3, 4, 1, 2, + xoptions = Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.SHRINK, + xpadding = 10, ypadding = 10) + description_label.show() - self.description_textview = gtk.TextView() - self.description_textview.set_wrap_mode(gtk.WRAP_WORD) - self.detail_view.attach(self.description_textview, 4,5, 1, 2, - xoptions=gtk.EXPAND|gtk.FILL|gtk.SHRINK, - yoptions=gtk.EXPAND|gtk.FILL|gtk.SHRINK, - xpadding=10, ypadding=10) + self.description_textview = Gtk.TextView() + self.description_textview.set_wrap_mode(Gtk.WrapMode.WORD) + + self.detail_view.attach(self.description_textview, 4, 5, 1, 2, + xoptions = Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL | + Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL | + Gtk.AttachOptions.SHRINK, + xpadding = 10, ypadding = 10) + self.description_textview.props.accepts_tab = False self.description_textview.show() #mtime - mtime_label = gtk.Label(_("Created")) - self.detail_view.attach(mtime_label, 3,4, 2,3, - xoptions=gtk.SHRINK, - yoptions=gtk.SHRINK, - xpadding=10, ypadding=10) + mtime_label = Gtk.Label(_("Created")) + + self.detail_view.attach(mtime_label, 3, 4, 2,3, + xoptions = Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.SHRINK, + xpadding = 10, ypadding = 10) + mtime_label.show() - self.mtime_textview = gtk.TextView() - self.mtime_textview.set_wrap_mode(gtk.WRAP_WORD) - self.detail_view.attach(self.mtime_textview, 4,5, 2,3, - xoptions=gtk.EXPAND|gtk.FILL|gtk.SHRINK, - yoptions=gtk.EXPAND|gtk.FILL|gtk.SHRINK, - xpadding=10, ypadding=10) + self.mtime_textview = Gtk.TextView() + self.mtime_textview.set_wrap_mode(Gtk.WrapMode.WORD) + + self.detail_view.attach(self.mtime_textview, 4, 5, 2,3, + xoptions = Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL | + Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL | + Gtk.AttachOptions.SHRINK, + xpadding = 10, ypadding = 10) + self.mtime_textview.props.accepts_tab = False self.mtime_textview.show() #mime_type - mime_label= gtk.Label(_("Type")) - self.detail_view.attach(mime_label, 3,4, 3,4, - xoptions=gtk.SHRINK, - yoptions=gtk.SHRINK, - xpadding=10, ypadding=10) + mime_label= Gtk.Label(_("Type")) + + self.detail_view.attach(mime_label, 3, 4, 3,4, + xoptions = Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.SHRINK, + xpadding = 10, ypadding = 10) + mime_label.show() - self.mime_textview = gtk.TextView() - self.mime_textview.set_wrap_mode(gtk.WRAP_WORD) - self.detail_view.attach(self.mime_textview, 4,5, 3,4, - xoptions=gtk.EXPAND|gtk.FILL|gtk.SHRINK, - yoptions=gtk.EXPAND|gtk.FILL|gtk.SHRINK, - xpadding=10, ypadding=10) + self.mime_textview = Gtk.TextView() + self.mime_textview.set_wrap_mode(Gtk.WrapMode.WORD) + + self.detail_view.attach(self.mime_textview, 4, 5, 3,4, + xoptions = Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL | + Gtk.AttachOptions.SHRINK, + yoptions = Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL | + Gtk.AttachOptions.SHRINK, + xpadding = 10, ypadding = 10) + self.mime_textview.props.accepts_tab = False self.mime_textview.show() - self._secondary_view.pack_end(self.detail_view) + self._secondary_view.pack_end(self.detail_view, True, True, 0) self.detail_view.show() return self._secondary_view @@ -443,7 +503,7 @@ class ImageThumbnail(activity.Activity): import base64 preview_data = base64.b64decode(jobject.metadata['preview']) - loader = gtk.gdk.PixbufLoader() + loader = Gdk.PixbufLoader() loader.write(preview_data) scaled_buf = loader.get_pixbuf() loader.close() @@ -456,6 +516,8 @@ class ImageThumbnail(activity.Activity): def load_file_table(self,col): self.num=0 + # FIXME: module object has no attribute mounts + ''' if col==2: ds_mounts = datastore.mounts() #check if externmal media used in journal @@ -466,7 +528,8 @@ class ImageThumbnail(activity.Activity): if self.num==0: self.tab_label[col].hide() - elif col==1: + elif col==1:''' + if col==1: self.load_files('/home/olpc',col) else: @@ -477,8 +540,8 @@ class ImageThumbnail(activity.Activity): self.load_files('/home/olpc/'+line,col) if self.num>max_file: break f.close() - - self.ls_journal[col].set_sort_column_id(COLUMN_MTIME, gtk.SORT_DESCENDING) + # FIXME: object has no attribute SORT_DESCENDING + #self.ls_journal[col].set_sort_column_id(COLUMN_MTIME, Gtk.SORT_DESCENDING) def load_files(self,dir,col): @@ -524,12 +587,14 @@ class ImageThumbnail(activity.Activity): jobject_wrapper.set_timestamp(mtime) jobject_wrapper.set_description(file_name) self.ls_journal[col].set(iter, COLUMN_TITLE, filename) - self.ls_journal[col].set(iter, COLUMN_MTIME,mtime) + self.ls_journal[col].set(iter, COLUMN_MTIME, str(mtime)) self.ls_journal[col].set(iter, COLUMN_JOBJECT, jobject_wrapper) except IOError: print 'No mimetype for : %s' % (file_name) def load_journal_table(self,col): - + pass + # FIXME: module object has no attribute mounts + ''' ds_mounts = datastore.mounts() mountpoint_id = None @@ -569,7 +634,7 @@ class ImageThumbnail(activity.Activity): self.ls_journal[col].set(iter, COLUMN_JOBJECT, jobject_wrapper) size = self.get_size(ds_objects[i]) / 1024 - self.ls_journal[col].set_sort_column_id(COLUMN_MTIME, gtk.SORT_DESCENDING) + self.ls_journal[col].set_sort_column_id(COLUMN_MTIME, Gtk.SORT_DESCENDING)''' def get_size(self, jobject): """Return the file size for a Journal object.""" @@ -588,14 +653,14 @@ class ImageThumbnail(activity.Activity): try: if filename==None:return if col==-1: - scaled_buf = gtk.gdk.pixbuf_new_from_file_at_size(filename, style.zoom(930), style.zoom(700)) + scaled_buf = GdkPixbuf.Pixbuf.new_from_file_at_size(filename, style.zoom(930), style.zoom(700)) return scaled_buf else: - scaled_buf = gtk.gdk.pixbuf_new_from_file_at_size(filename, style.zoom(320), style.zoom(240)) + scaled_buf = GdkPixbuf.Pixbuf.new_from_file_at_size(filename, style.zoom(320), style.zoom(240)) self.image[col][id].set_from_pixbuf(scaled_buf) self.image[col][id].show() except IOError: print 'Failed to open image %s' % (filename) - except GError: print 'Failed zoom image %s' % (filename) + #except GError: print 'Failed zoom image %s' % (filename) class JobjectWrapper(): @@ -698,4 +763,4 @@ class JobjectWrapper(): return self.__jobject.object_id else: return self.__object_id - +
\ No newline at end of file @@ -16,6 +16,6 @@ # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-from sugar.activity import bundlebuilder +from sugar3.activity import bundlebuilder bundlebuilder.start() |