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
|
b
|
_SERVICE_NAME = "org.laptop.Activity" |
35 | 35 | _SERVICE_PATH = "/org/laptop/Activity" |
36 | 36 | _SERVICE_INTERFACE = "org.laptop.Activity" |
37 | 37 | |
| 38 | LAUNCHED = 0 |
| 39 | LAUNCHING = 1 |
| 40 | ACTIVATED = 2 |
| 41 | |
| 42 | |
38 | 43 | class Activity(gobject.GObject): |
39 | 44 | """Activity which appears in the "Home View" of the Sugar shell |
40 | 45 | |
… |
… |
class Activity(gobject.GObject): |
47 | 52 | __gtype_name__ = 'SugarHomeActivity' |
48 | 53 | |
49 | 54 | __gproperties__ = { |
50 | | 'launching' : (bool, None, None, False, |
| 55 | 'launching' : (int, None, None, LAUNCHED, ACTIVATED, LAUNCHED, |
51 | 56 | gobject.PARAM_READWRITE), |
52 | 57 | } |
53 | 58 | |
… |
… |
class ShellModel(gobject.GObject): |
477 | 482 | |
478 | 483 | if not home_activity: |
479 | 484 | home_activity = Activity(activity_info, activity_id, window) |
| 485 | home_activity.props.launching = LAUNCHING |
480 | 486 | self._add_activity(home_activity) |
481 | 487 | else: |
482 | 488 | home_activity.set_window(window) |
483 | 489 | |
484 | 490 | if wm.get_sugar_window_type(window) != 'launcher': |
485 | | home_activity.props.launching = False |
| 491 | home_activity.props.launching = LAUNCHED |
486 | 492 | if not home_activity.is_journal(): |
487 | 493 | self.emit('launch-completed', home_activity) |
488 | 494 | |
… |
… |
class ShellModel(gobject.GObject): |
560 | 566 | " was not found in the bundle registry." |
561 | 567 | % service_name) |
562 | 568 | home_activity = Activity(activity_info, activity_id) |
563 | | home_activity.props.launching = True |
| 569 | home_activity.props.launching = ACTIVATED |
564 | 570 | self._add_activity(home_activity) |
565 | 571 | |
566 | 572 | self._set_active_activity(home_activity) |
… |
… |
class ShellModel(gobject.GObject): |
577 | 583 | if home_activity: |
578 | 584 | logging.debug("Activity %s (%s) launch failed", activity_id, |
579 | 585 | home_activity.get_type()) |
580 | | if home_activity.props.launching: |
| 586 | if home_activity.props.launching != LAUNCHED: |
581 | 587 | self.emit('launch-failed', home_activity) |
582 | 588 | else: |
583 | 589 | self._remove_activity(home_activity) |
diff --git a/src/jarabe/view/service.py b/src/jarabe/view/service.py
index fbcc961..32aecac 100644
a
|
b
|
class UIService(dbus.service.Object): |
83 | 83 | |
84 | 84 | if activity is not None and activity.get_window() is not None: |
85 | 85 | activity.get_window().activate(gtk.get_current_event_time()) |
86 | | return not activity.props.launching |
| 86 | if activity.props.launching == shell.LAUNCHING: |
| 87 | activity.props.launching = shell.ACTIVATED |
| 88 | return False |
| 89 | else: |
| 90 | return True |
87 | 91 | |
88 | 92 | return False |
89 | 93 | |