Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2007-06-01 19:21:30 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2007-06-01 19:21:30 (GMT)
commit2b7ffe41d9e8160c7bda506efe9ad35971d599df (patch)
tree3b35d81db14c94327c30a32abbe8a614a56f8c17 /shell
parent5cc9a8c42437376ccef2fbe578a637f8ab3396b5 (diff)
Make bundle_id and activity_id window properties to
avoid races.
Diffstat (limited to 'shell')
-rw-r--r--shell/model/homeactivity.py4
-rw-r--r--shell/model/homemodel.py37
2 files changed, 21 insertions, 20 deletions
diff --git a/shell/model/homeactivity.py b/shell/model/homeactivity.py
index f029e15..2a36ae5 100644
--- a/shell/model/homeactivity.py
+++ b/shell/model/homeactivity.py
@@ -40,7 +40,7 @@ class HomeActivity(gobject.GObject):
gobject.PARAM_READWRITE),
}
- def __init__(self, bundle=None, activity_id=None):
+ def __init__(self, bundle, activity_id):
"""Initialise the HomeActivity
bundle -- sugar.activity.bundle.Bundle instance,
@@ -72,8 +72,6 @@ class HomeActivity(gobject.GObject):
def set_service(self, service):
self._service = service
- if not self._activity_id:
- self._activity_id = service.get_id()
def get_service(self):
"""Retrieve the application's sugar introspection service
diff --git a/shell/model/homemodel.py b/shell/model/homemodel.py
index f9cd472..7eb4b46 100644
--- a/shell/model/homemodel.py
+++ b/shell/model/homemodel.py
@@ -20,6 +20,8 @@ import gobject
import wnck
import dbus
+from sugar import wm
+
from model.homeactivity import HomeActivity
from model import bundleregistry
@@ -94,23 +96,25 @@ class HomeModel(gobject.GObject):
if window.get_window_type() == wnck.WINDOW_NORMAL:
activity = None
- service = self._get_activity_service(window.get_xid())
- if service:
- activity_id = service.get_id()
- activity = self._get_activity_by_id(activity_id)
+ activity_id = wm.get_activity_id(window)
- if activity:
- activity.set_service(service)
+ bundle_id = wm.get_bundle_id(window)
+ if bundle_id:
+ bundle = self._bundle_registry.get_bundle(bundle_id)
else:
- activity = self._get_activity_by_xid(window.get_xid())
+ bundle = None
- if activity:
- activity.set_window(window)
- else:
- activity = HomeActivity()
- activity.set_window(window)
+ if activity_id:
+ activity = self._get_activity_by_id(activity_id)
+
+ if not activity:
+ activity = HomeActivity(bundle, activity_id)
self._add_activity(activity)
+ service = self._get_activity_service(window.get_xid())
+ activity.set_service(service)
+ activity.set_window(window)
+
activity.props.launching = False
self.emit('activity-started', activity)
@@ -127,10 +131,9 @@ class HomeModel(gobject.GObject):
try:
xid = int(name[len(_SERVICE_NAME):])
activity = self._get_activity_by_xid(xid)
- if activity:
+ if activity and not activity.get_service():
service = self._get_activity_service(xid)
- if service:
- activity.set_service()
+ activity.set_service(service)
except ValueError:
logging.error('Invalid activity service name, '
'cannot extract the xid')
@@ -221,8 +224,8 @@ class HomeModel(gobject.GObject):
self._add_activity(activity)
def notify_activity_launch_failed(self, activity_id):
- if self._activities.has_key(activity_id):
- activity = self._activities[activity_id]
+ activity = self._get_activity_by_id(activity_id)
+ if activity:
logging.debug("Activity %s (%s) launch failed" % (activity_id, activity.get_type()))
self._remove_activity(activity)
else: