diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2008-08-27 12:15:37 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2008-08-27 12:22:47 (GMT) |
commit | 480f4b3fdd52341ddfbe017b52fa999b24c2f595 (patch) | |
tree | f55b18bf0b5cbda1f4c5f9e70922a983597d888b /src/model | |
parent | 1f86199384d9b77a4d68381e888d6ce60f7b6f54 (diff) |
Make the launcher window a normal window with a special
type property. Fix #7293
Patch by Eben, small cleanups by me
Diffstat (limited to 'src/model')
-rw-r--r-- | src/model/homeactivity.py | 8 | ||||
-rw-r--r-- | src/model/homemodel.py | 15 |
2 files changed, 17 insertions, 6 deletions
diff --git a/src/model/homeactivity.py b/src/model/homeactivity.py index fa50932..34ebda3 100644 --- a/src/model/homeactivity.py +++ b/src/model/homeactivity.py @@ -73,9 +73,11 @@ class HomeActivity(gobject.GObject): dbus_interface="org.freedesktop.DBus") def set_window(self, window): - """An activity is 'launched' once we get its window.""" - if self._window or self._xid: - raise RuntimeError("Activity is already launched!") + """Set the window for the activity + + We allow resetting the window for an activity so that we + can replace the launcher once we get its real window. + """ if not window: raise ValueError("window must be valid") diff --git a/src/model/homemodel.py b/src/model/homemodel.py index 8267584..d153f06 100644 --- a/src/model/homemodel.py +++ b/src/model/homemodel.py @@ -18,12 +18,21 @@ import logging import gobject import wnck +import gtk from sugar import wm from sugar import activity from model.homeactivity import HomeActivity +def _get_sugar_window_type(self, window): + window = gtk.gdk.window_foreign_new(window.get_xid()) + prop_info = window.property_get('_SUGAR_WINDOW_TYPE', 'STRING') + if prop_info is None: + return None + else: + return prop_info[2] + class HomeModel(gobject.GObject): """Model of the "Home" view (activity management) @@ -152,7 +161,7 @@ class HomeModel(gobject.GObject): def index(self, obj): return self._activities.index(obj) - + def _window_opened_cb(self, screen, window): if window.get_window_type() == wnck.WINDOW_NORMAL: home_activity = None @@ -175,8 +184,8 @@ class HomeModel(gobject.GObject): home_activity.set_window(window) - home_activity.props.launching = False - self.emit('launch-completed', home_activity) + if self._get_sugar_window_type(window) != 'launcher': + self.emit('launch-completed', home_activity) if self._active_activity is None: self._set_active_activity(home_activity) |