Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArt
diff options
context:
space:
mode:
Diffstat (limited to 'TurtleArt')
-rw-r--r--TurtleArt/tautils.py27
-rw-r--r--TurtleArt/tawindow.py8
2 files changed, 20 insertions, 15 deletions
diff --git a/TurtleArt/tautils.py b/TurtleArt/tautils.py
index e6120ec..48162fe 100644
--- a/TurtleArt/tautils.py
+++ b/TurtleArt/tautils.py
@@ -317,31 +317,36 @@ def get_save_name(filefilter, load_save_folder, save_file_name):
return do_dialog(dialog, filefilter, load_save_folder)
-def chooser(parent_window, filter, action):
+def chooser_dialog(parent_window, filter, action):
''' Choose an object from the datastore and take some action '''
from sugar.graphics.objectchooser import ObjectChooser
chooser = None
+ dsobject = None
+ cleanup_needed = False
try:
chooser = ObjectChooser(parent=parent_window, what_filter=filter)
- except TypeError:
+ except TypeError: # Old-syle Sugar chooser
chooser = ObjectChooser(
None,
parent_window,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT)
+ cleanup_needed = True
+
if chooser is not None:
- dsobject = None
- try:
- result = chooser.run()
- if result == gtk.RESPONSE_ACCEPT:
- dsobject = chooser.get_selected_object()
- finally:
+ result = chooser.run()
+ if result == gtk.RESPONSE_ACCEPT:
+ dsobject = chooser.get_selected_object()
+ if cleanup_needed:
chooser.destroy()
del chooser
- if dsobject is not None:
- action(dsobject)
- dsobject.destroy()
+ if dsobject is not None:
+ gobject.idle_add(self._take_action, action, dsobject)
+
+def _take_action(self, action, dsobject):
+ action(dsobject)
+ dsobject.destroy()
def data_from_file(ta_file):
''' Open the .ta file, ignoring any .png file that might be present. '''
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py
index c332d35..e4c7b65 100644
--- a/TurtleArt/tawindow.py
+++ b/TurtleArt/tawindow.py
@@ -73,7 +73,7 @@ from tautils import (magnitude, get_load_name, get_save_name, data_from_file,
data_to_file, round_int, get_id, get_pixbuf_from_journal,
movie_media_type, audio_media_type, image_media_type,
save_picture, calc_image_size, get_path, hide_button_hit,
- show_button_hit, chooser, arithmetic_check, xy,
+ show_button_hit, chooser_dialog, arithmetic_check, xy,
find_block_to_run, find_top_block, journal_check,
find_group, find_blk_below, data_to_string,
find_start_stack, get_hardware, debug_output,
@@ -3348,7 +3348,7 @@ before making changes to your Turtle Blocks program'))
''' Import a file from the Sugar Journal '''
# TODO: check blk name to set filter
if self.running_sugar:
- chooser(self.parent, '', self._update_media_blk)
+ chooser_dialog(self.parent, '', self._update_media_blk)
else:
fname, self.load_save_folder = get_load_name('.*',
self.load_save_folder)
@@ -3719,8 +3719,8 @@ before making changes to your Turtle Blocks program'))
def _import_py(self):
''' Import Python code into a block '''
if self.running_sugar:
- chooser(self.parent, 'org.laptop.Pippy',
- self.load_python_code_from_journal)
+ chooser_dialog(self.parent, 'org.laptop.Pippy',
+ self.load_python_code_from_journal)
else:
self.load_python_code_from_file(fname=None, add_new_block=False)