From d304f72872fa346dd2c3cedd1d3e508a3aeb5107 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Fri, 28 Aug 2009 12:18:00 +0200 Subject: [PATCH 1/4] Trap X errors in wm.py (#1123) --- src/sugar/wm.py | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/src/sugar/wm.py b/src/sugar/wm.py index d813d94c..21077719 100644 --- a/src/sugar/wm.py +++ b/src/sugar/wm.py @@ -20,11 +20,37 @@ UNSTABLE. Used only internally by Activity and jarabe. """ import gtk +import logging +def _property_get_trapped(window, prop, prop_type): + gtk.gdk.error_trap_push() + + prop_info = window.property_get('_SUGAR_ACTIVITY_ID', 'STRING') + + # We just log a message + error = gtk.gdk.error_trap_pop() + if gtk.gdk.error_trap_pop(): + logging.debug('Received X Error (%i) while getting ' + 'a property on a window' % error) + + return prop_info + +def _property_change_trapped(window, prop, prop_type, format, mode, data): + gtk.gdk.error_trap_push() + + window.property_change(prop, prop_type, format, mode, data) + + error = gtk.gdk.error_trap_pop() + if error: + logging.debug('Received X Error (%i) while setting ' + 'a property on a window' % error) + raise RuntimeError('Received X Error (%i) while setting ' + 'a property on a window' % error) + def get_activity_id(wnck_window): window = gtk.gdk.window_foreign_new(wnck_window.get_xid()) - prop_info = window.property_get('_SUGAR_ACTIVITY_ID', 'STRING') + prop_info = _property_get_trapped(window, '_SUGAR_ACTIVITY_ID', 'STRING') if prop_info is None: return None else: @@ -33,7 +59,7 @@ def get_activity_id(wnck_window): def get_bundle_id(wnck_window): window = gtk.gdk.window_foreign_new(wnck_window.get_xid()) - prop_info = window.property_get('_SUGAR_BUNDLE_ID', 'STRING') + prop_info = _property_get_trapped(window, '_SUGAR_BUNDLE_ID', 'STRING') if prop_info is None: return None else: @@ -41,10 +67,11 @@ def get_bundle_id(wnck_window): def set_activity_id(window, activity_id): - window.property_change('_SUGAR_ACTIVITY_ID', 'STRING', 8, - gtk.gdk.PROP_MODE_REPLACE, activity_id) + _property_change_trapped(window, '_SUGAR_ACTIVITY_ID', 'STRING', 8, + gtk.gdk.PROP_MODE_REPLACE, activity_id) def set_bundle_id(window, bundle_id): - window.property_change('_SUGAR_BUNDLE_ID', 'STRING', 8, - gtk.gdk.PROP_MODE_REPLACE, bundle_id) + _property_change_trapped(window, '_SUGAR_BUNDLE_ID', 'STRING', 8, + gtk.gdk.PROP_MODE_REPLACE, bundle_id) + From 78d64031c31bcf2b640e2630253f7712f3499e24 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Fri, 28 Aug 2009 12:06:43 +0000 Subject: [PATCH 2/4] Add is_user_activity() to ActivityBundle #701 --- src/sugar/bundle/activitybundle.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sugar/bundle/activitybundle.py b/src/sugar/bundle/activitybundle.py index 36e37647..8aa8fb00 100644 --- a/src/sugar/bundle/activitybundle.py +++ b/src/sugar/bundle/activitybundle.py @@ -400,3 +400,6 @@ class ActivityBundle(Bundle): os.remove(path) self._uninstall(install_path) + + def is_user_activity(self): + return self.get_path().startswith(env.get_user_activities_path()) From d3c9dc535b710c4bfbba98ba92f15a4bf323dae9 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Fri, 28 Aug 2009 18:48:13 +0200 Subject: [PATCH 3/4] Do not pop the error trap twice (pointed out by Sascha Silbe in #1123). --- src/sugar/wm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sugar/wm.py b/src/sugar/wm.py index 21077719..3a63832f 100644 --- a/src/sugar/wm.py +++ b/src/sugar/wm.py @@ -29,7 +29,7 @@ def _property_get_trapped(window, prop, prop_type): # We just log a message error = gtk.gdk.error_trap_pop() - if gtk.gdk.error_trap_pop(): + if error: logging.debug('Received X Error (%i) while getting ' 'a property on a window' % error) From 0991081eff41248aa860f141bdaec3caab1870e1 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Sun, 30 Aug 2009 18:00:44 +0200 Subject: [PATCH 4/4] Get the correct window property instead of '_SUGAR_ACTIVITY_ID' (#1251) --- src/sugar/wm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sugar/wm.py b/src/sugar/wm.py index 3a63832f..4af66672 100644 --- a/src/sugar/wm.py +++ b/src/sugar/wm.py @@ -25,7 +25,7 @@ import logging def _property_get_trapped(window, prop, prop_type): gtk.gdk.error_trap_push() - prop_info = window.property_get('_SUGAR_ACTIVITY_ID', 'STRING') + prop_info = window.property_get(prop, prop_type) # We just log a message error = gtk.gdk.error_trap_pop()