Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2013-05-29 18:23:28 (GMT)
committer Walter Bender <walter@sugarlabs.org>2013-05-29 18:23:28 (GMT)
commit224c411736b7e233f4947afcc338e983fb1565bb (patch)
tree709fdc6de93b9d8912ff7b939169a7460ec0ad10
parent5f5bf8e043f80cb9cc77016a6d235fa0e9ece9ce (diff)
delay loading plugins
-rw-r--r--TurtleArt/tautils.py9
-rw-r--r--TurtleArt/tawindow.py38
-rw-r--r--TurtleArtActivity.py63
-rw-r--r--activity/activity.info2
-rw-r--r--plugins/turtle_blocks_extras/turtle_blocks_extras.py6
-rwxr-xr-xturtleblocks.py3
6 files changed, 78 insertions, 43 deletions
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)