From 224c411736b7e233f4947afcc338e983fb1565bb Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Wed, 29 May 2013 18:23:28 +0000 Subject: delay loading plugins --- diff --git a/TurtleArt/tautils.py b/TurtleArt/tautils.py index 345fb22..07b72d9 100644 --- a/TurtleArt/tautils.py +++ b/TurtleArt/tautils.py @@ -22,7 +22,11 @@ import gtk import gobject -import gconf +try: + import gconf + HAS_GCONF = True +except ImportError: + HAS_GCONF = False import dbus import cairo import pickle @@ -877,6 +881,9 @@ def power_manager_off(status): power_manager_off(True) --> Disable power manager power_manager_off(False) --> Use custom power manager ''' + if not HAS_GCONF: + return + global FIRST_TIME OHM_SERVICE_NAME = 'org.freedesktop.ohm' diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py index 5b0c3e0..c0eedca 100644 --- a/TurtleArt/tawindow.py +++ b/TurtleArt/tawindow.py @@ -269,26 +269,36 @@ class TurtleArtWindow(): self._configure_cb(None) self._icon_paths = [os.path.join(self.path, 'icons')] - self.turtleart_plugins = [] - self._init_plugins() self.lc = LogoCode(self) + self.turtleart_plugins = [] + self.saved_pictures = [] + self.block_operation = '' + from tabasics import Palettes Palettes(self) - self._setup_plugins() if self.interactive_mode: - self._setup_misc() - for name in palette_init_on_start: - debug_output('initing palette %s' % (name), self.running_sugar) - self.show_toolbar_palette(palette_names.index(name), - init_only=False, regenerate=True, - show=False) - self.show_toolbar_palette(0, init_only=False, regenerate=True, - show=True) - self.saved_pictures = [] - self.block_operation = '' + gobject.idle_add(self._lazy_init) + else: + self._init_plugins() + self._setup_plugins() + + def _lazy_init(self): + self._init_plugins() + self._setup_plugins() + self._setup_misc() + for name in palette_init_on_start: + debug_output('initing palette %s' % (name), self.running_sugar) + self.show_toolbar_palette(palette_names.index(name), + init_only=False, regenerate=True, + show=False) + + self.show_toolbar_palette(0, init_only=False, regenerate=True, + show=True) + if self.running_sugar: + self.activity.check_buttons_for_fit() def _set_screen_dpi(self): dpi = get_screen_dpi() @@ -688,6 +698,8 @@ class TurtleArtWindow(): self.width = event.width self.height = event.height for name in OVERLAY_SHAPES: + if not name in self.overlay_shapes: + continue shape = self.overlay_shapes[name] showing = False if shape in shape._sprites.list: diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py index e2393c8..c8f9755 100644 --- a/TurtleArtActivity.py +++ b/TurtleArtActivity.py @@ -52,7 +52,11 @@ import subprocess import ConfigParser import shutil import tempfile -import gconf +try: + import gconf + HAS_GCONF = True +except ImportError: + HAS_GCONF = False from gettext import gettext as _ @@ -85,6 +89,7 @@ class TurtleArtActivity(activity.Activity): self.init_complete = False self.palette_buttons = [] + self._palette_names = [] self._overflow_buttons = [] self._check_ver_change(get_path(activity, 'data')) @@ -119,10 +124,12 @@ class TurtleArtActivity(activity.Activity): self.metadata['activity count'] = str(count) self._defer_palette_move = False - self.check_buttons_for_fit() - self.client = gconf.client_get_default() - if self.client.get_int(self._HOVER_HELP) == 1: - self._do_hover_help_toggle(None) + # Now called from lazy_init + # self.check_buttons_for_fit() + if HAS_GCONF: + self.client = gconf.client_get_default() + if self.client.get_int(self._HOVER_HELP) == 1: + self._do_hover_help_toggle(None) self.init_complete = True def check_buttons_for_fit(self): @@ -845,15 +852,12 @@ class TurtleArtActivity(activity.Activity): self._overflow_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) self._overflow_sw.add_with_viewport(self._overflow_box) + elif len(self.palette_buttons) < len(palette_names): + # add new buttons for palettes generated since last time + self._generate_palette_buttons(add_buttons=True) + self._remove_palette_buttons() else: # remove the radio buttons and overflow buttons - for button in self.palette_buttons: - if button in self._palette_toolbar: - self._palette_toolbar.remove(button) - for button in self._overflow_buttons: - if button in self._overflow_box: - self._overflow_box.remove(button) - if self._overflow_palette_button in self._palette_toolbar: - self._palette_toolbar.remove(self._overflow_palette_button) + self._remove_palette_buttons() for i in range(len(self.palette_buttons)): if i < max_palettes: @@ -876,9 +880,22 @@ class TurtleArtActivity(activity.Activity): self._overflow_box.show_all() self._overflow_palette.set_content(self._overflow_sw) - def _generate_palette_buttons(self): + def _remove_palette_buttons(self): + for button in self.palette_buttons: + if button in self._palette_toolbar: + self._palette_toolbar.remove(button) + for button in self._overflow_buttons: + if button in self._overflow_box: + self._overflow_box.remove(button) + if self._overflow_palette_button in self._palette_toolbar: + self._palette_toolbar.remove(self._overflow_palette_button) + + def _generate_palette_buttons(self, add_buttons=False): ''' Create a radio button and a normal button for each palette ''' for i, palette_name in enumerate(palette_names): + if palette_name in self._palette_names: + continue + self._palette_names.append(palette_name) if i == 0: palette_group = None else: @@ -899,14 +916,16 @@ class TurtleArtActivity(activity.Activity): self.do_palette_buttons_cb, None, arg=i)) - # And we need an extra button for the overflow - self._overflow_palette_button = self._radio_button_factory( - 'overflow', - None, - self._overflow_palette_cb, - None, - _('Palettes'), - palette_group) + + if not add_buttons: + # And we need an extra button for the overflow + self._overflow_palette_button = self._radio_button_factory( + 'overflow', + None, + self._overflow_palette_cb, + None, + _('Palettes'), + palette_group) def _overflow_palette_cb(self, button): _logger.debug('overflow palette cb') diff --git a/activity/activity.info b/activity/activity.info index e9190ef..7dca52a 100644 --- a/activity/activity.info +++ b/activity/activity.info @@ -1,6 +1,6 @@ [Activity] name = TurtleBlocks -activity_version = 179 +activity_version = 180 license = MIT bundle_id = org.laptop.TurtleArtActivity exec = sugar-activity TurtleArtActivity.TurtleArtActivity diff --git a/plugins/turtle_blocks_extras/turtle_blocks_extras.py b/plugins/turtle_blocks_extras/turtle_blocks_extras.py index 36d98e2..fcbfafe 100644 --- a/plugins/turtle_blocks_extras/turtle_blocks_extras.py +++ b/plugins/turtle_blocks_extras/turtle_blocks_extras.py @@ -120,7 +120,6 @@ boolean operators from Numbers palette')) self.tw.lc.def_prim('clamp', 1, primitive_dictionary['clamp'], True) def _media_palette(self): - palette = make_palette('media', colors=["#A0FF00", "#80A000"], help_string=_('Palette of media objects'), @@ -321,7 +320,6 @@ amplitude, and duration (in seconds)')) primitive_dictionary['sinewave'](x, y, z)) def _sensor_palette(self): - palette = make_palette('sensor', colors=["#FF6060", "#A06060"], help_string=_('Palette of sensor blocks'), @@ -449,7 +447,6 @@ program started')) lambda self: primitive_dictionary['time']()) def _extras_palette(self): - palette = make_palette('extras', colors=["#FF0000", "#A00000"], help_string=_('Palette of extra options'), @@ -781,7 +778,6 @@ module found in the Journal')) primitive_dictionary['loadpalette'](x)) def _portfolio_palette(self): - palette = make_palette('portfolio', colors=["#0606FF", "#0606A0"], help_string=_('Palette of presentation \ @@ -1074,7 +1070,7 @@ bullets')) if os.path.exists(self.tw.macros_path): files = glob.glob(os.path.join(self.tw.macros_path, '*.tb')) - print 'creating macros palette' + debug_output('making myblocks palette', self.tw.running_sugar) if len(files) > 0: palette = make_palette( 'myblocks', diff --git a/turtleblocks.py b/turtleblocks.py index 4b7c443..baf264d 100755 --- a/turtleblocks.py +++ b/turtleblocks.py @@ -577,7 +577,8 @@ Would you like to save before quitting?')) ''' Turn hover help off ''' self.tw.no_help = True self.tw.last_label = None - self.tw.status_spr.hide() + if self.tw.status_spr is not None: + self.tw.status_spr.hide() self.hover.set_active(False) self.client.set_int(self._HOVER_HELP, 1) -- cgit v0.9.1