From 688ff34f8cb69a75bdfc53acf5c94d2cec465928 Mon Sep 17 00:00:00 2001
From: Aleksey Lim <alsroot@member.fsf.org>
Date: Thu, 11 Mar 2010 20:03:14 +0000
Subject: resume journal entry race may duplicate resumed activity id #1719


diff --git a/src/jarabe/model/shell.py b/src/jarabe/model/shell.py
index e03e0f7..a2d027e 100644
--- a/src/jarabe/model/shell.py
+++ b/src/jarabe/model/shell.py
@@ -35,6 +35,11 @@ _SERVICE_NAME = "org.laptop.Activity"
 _SERVICE_PATH = "/org/laptop/Activity"
 _SERVICE_INTERFACE = "org.laptop.Activity"
 
+LAUNCHED = 0
+LAUNCHING = 1
+ACTIVATED = 2
+
+
 class Activity(gobject.GObject):
     """Activity which appears in the "Home View" of the Sugar shell
 
@@ -47,7 +52,7 @@ class Activity(gobject.GObject):
     __gtype_name__ = 'SugarHomeActivity'
 
     __gproperties__ = {
-        'launching' : (bool, None, None, False,
+        'launching' : (int, None, None, LAUNCHED, ACTIVATED, LAUNCHED,
                        gobject.PARAM_READWRITE),
     }
 
@@ -477,12 +482,13 @@ class ShellModel(gobject.GObject):
 
             if not home_activity:
                 home_activity = Activity(activity_info, activity_id, window)
+                home_activity.props.launching = LAUNCHING
                 self._add_activity(home_activity)
             else:
                 home_activity.set_window(window)
 
             if wm.get_sugar_window_type(window) != 'launcher':
-                home_activity.props.launching = False
+                home_activity.props.launching = LAUNCHED
                 if not home_activity.is_journal():
                     self.emit('launch-completed', home_activity)
 
@@ -560,7 +566,7 @@ class ShellModel(gobject.GObject):
                              " was not found in the bundle registry."
                              % service_name)
         home_activity = Activity(activity_info, activity_id)
-        home_activity.props.launching = True
+        home_activity.props.launching = ACTIVATED
         self._add_activity(home_activity)
 
         self._set_active_activity(home_activity)
@@ -577,7 +583,7 @@ class ShellModel(gobject.GObject):
         if home_activity:
             logging.debug("Activity %s (%s) launch failed", activity_id,
                 home_activity.get_type())
-            if home_activity.props.launching:
+            if home_activity.props.launching != LAUNCHED:
                 self.emit('launch-failed', home_activity)
             else:
                 self._remove_activity(home_activity)
diff --git a/src/jarabe/view/service.py b/src/jarabe/view/service.py
index fbcc961..32aecac 100644
--- a/src/jarabe/view/service.py
+++ b/src/jarabe/view/service.py
@@ -83,7 +83,11 @@ class UIService(dbus.service.Object):
 
         if activity is not None and activity.get_window() is not None:
             activity.get_window().activate(gtk.get_current_event_time())
-            return not activity.props.launching
+            if activity.props.launching == shell.LAUNCHING:
+                activity.props.launching = shell.ACTIVATED
+                return False
+            else:
+                return True
 
         return False
 
-- 
1.6.5.3

