diff options
author | John (J5) Palmieri <johnp@redhat.com> | 2007-08-27 19:47:58 (GMT) |
---|---|---|
committer | John (J5) Palmieri <johnp@redhat.com> | 2007-08-27 19:47:58 (GMT) |
commit | c06d63948794cce11e5b59e98f2ec2122a433972 (patch) | |
tree | 955687e89dbdff6dfc29ee2d07cf3d8f5aeea9c7 /shell | |
parent | 2cae66b0ea86235788220c9f7b05aa2ad4fdc58f (diff) |
Make D-Bus calls async on startup
Diffstat (limited to 'shell')
-rw-r--r-- | shell/model/BuddyModel.py | 35 | ||||
-rw-r--r-- | shell/model/MeshModel.py | 14 | ||||
-rw-r--r-- | shell/view/frame/ActivitiesBox.py | 9 | ||||
-rw-r--r-- | shell/view/frame/FriendsBox.py | 7 |
4 files changed, 43 insertions, 22 deletions
diff --git a/shell/model/BuddyModel.py b/shell/model/BuddyModel.py index 9f86e57..f72ad70 100644 --- a/shell/model/BuddyModel.py +++ b/shell/model/BuddyModel.py @@ -52,27 +52,36 @@ class BuddyModel(gobject.GObject): self._buddy = None - # If given just a key, try to get the buddy from the PS first if not buddy: - self._key = key - for iter_buddy in self._pservice.get_buddies(): - if iter_buddy.props.key == key: - buddy = iter_buddy - break - - # If successful, copy properties from the PS buddy object - if buddy: - self._update_buddy(buddy) - else: - # Otherwise, connect to the PS's buddy-appeared signal and + self._key = key + # connect to the PS's buddy-appeared signal and # wait for the buddy to appear self._ba_handler = self._pservice.connect('buddy-appeared', self._buddy_appeared_cb) - self._key = key # Set color to 'inactive'/'disconnected' self._set_color_from_string(_NOT_PRESENT_COLOR) self._nick = nick + self._pservice.get_buddies_async(reply_handler=self._get_buddies_cb) + else: + self._update_buddy(buddy) + + def _get_buddies_cb(self, list): + buddy = None + for iter_buddy in list: + if iter_buddy.props.key == key: + buddy = iter_buddy + break + + if buddy: + if self._ba_handler: + # Once we have the buddy, we no longer need to + # monitor buddy-appeared events + self._pservice.disconnect(self._ba_handler) + self._ba_handler = None + + self._update_buddy(buddy) + def _set_color_from_string(self, color_string): self._color = XoColor(color_string) diff --git a/shell/model/MeshModel.py b/shell/model/MeshModel.py index 82980c3..e326634 100644 --- a/shell/model/MeshModel.py +++ b/shell/model/MeshModel.py @@ -87,11 +87,9 @@ class MeshModel(gobject.GObject): self._buddy_disappeared_cb) # Add any buddies the PS knows about already - for buddy in self._pservice.get_buddies(): - self._buddy_appeared_cb(self._pservice, buddy) + self._pservice.get_buddies_async(reply_handler=self._get_buddies_cb) - for activity in self._pservice.get_activities(): - self._check_activity(activity) + self._pservice.get_activities_async(reply_handler=self._get_activities_cb) network_manager = hardwaremanager.get_network_manager() if network_manager: @@ -102,6 +100,14 @@ class MeshModel(gobject.GObject): network_manager.connect('device-removed', self._nm_device_removed_cb) + def _get_buddies_cb(self, list): + for buddy in list: + self._buddy_appeared_cb(self._pservice, buddy) + + def _get_activities_cb(self, list): + for activity in list: + self._check_activity(activity) + def _nm_device_added_cb(self, manager, nm_device): self._add_network_device(nm_device) diff --git a/shell/view/frame/ActivitiesBox.py b/shell/view/frame/ActivitiesBox.py index 909a5f2..43db16d 100644 --- a/shell/view/frame/ActivitiesBox.py +++ b/shell/view/frame/ActivitiesBox.py @@ -68,9 +68,7 @@ class ActivitiesBox(hippo.CanvasBox): self._invites = self._shell_model.get_invites() registry = activity.get_registry() - for activity_info in registry.get_activities(): - if activity_info.show_launcher: - self.add_activity(activity_info) + registry.get_activities_async(reply_handler=self._get_activities_cb) registry.connect('activity-added', self._activity_added_cb) @@ -79,6 +77,11 @@ class ActivitiesBox(hippo.CanvasBox): self._invites.connect('invite-added', self._invite_added_cb) self._invites.connect('invite-removed', self._invite_removed_cb) + def _get_activities_cb(self, activity_list): + for activity_info in activity_list: + if activity_info.show_launcher: + self.add_activity(activity_info) + def _activity_clicked_cb(self, icon): self._shell.start_activity(icon.get_bundle_id()) diff --git a/shell/view/frame/FriendsBox.py b/shell/view/frame/FriendsBox.py index 30f5963..b634cb1 100644 --- a/shell/view/frame/FriendsBox.py +++ b/shell/view/frame/FriendsBox.py @@ -54,13 +54,16 @@ class FriendsBox(hippo.CanvasBox): self.__activity_appeared_cb) # Add initial activities the PS knows about - for activity in self._pservice.get_activities(): - self.__activity_appeared_cb(self._pservice, activity) + self._pservice.get_activities_async(reply_handler=self._get_activities_cb) home_model = shell.get_model().get_home() home_model.connect('active-activity-changed', self._active_activity_changed_cb) + def _get_activities_cb(self, list): + for activity in list: + self.__activity_appeared_cb(self._pservice, activity) + def add_buddy(self, buddy): if self._buddies.has_key(buddy.props.key): return |