From f74196ab62feda4729de279cb57873ac4eae6553 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Thu, 18 Sep 2008 12:13:42 +0000 Subject: #8485 Disconnect some signals to prevent mem leaks. --- diff --git a/src/model/homeactivity.py b/src/model/homeactivity.py index 9dc4f9c..6df4ddd 100644 --- a/src/model/homeactivity.py +++ b/src/model/homeactivity.py @@ -67,11 +67,13 @@ class HomeActivity(gobject.GObject): self._retrieve_service() + self._name_owner_changed_handler = None if not self._service: bus = dbus.SessionBus() - bus.add_signal_receiver(self._name_owner_changed_cb, - signal_name="NameOwnerChanged", - dbus_interface="org.freedesktop.DBus") + self._name_owner_changed_handler = bus.add_signal_receiver( + self._name_owner_changed_cb, + signal_name="NameOwnerChanged", + dbus_interface="org.freedesktop.DBus") def set_window(self, window): """Set the window for the activity @@ -220,6 +222,8 @@ class HomeActivity(gobject.GObject): if name == self._get_service_name(): self._retrieve_service() self.set_active(True) + self._name_owner_changed_handler.remove() + self._name_owner_changed_handler = None def set_active(self, state): """Propagate the current state to the activity object""" diff --git a/src/view/BuddyMenu.py b/src/view/BuddyMenu.py index 57ad84d..427ac3d 100644 --- a/src/view/BuddyMenu.py +++ b/src/view/BuddyMenu.py @@ -51,6 +51,8 @@ class BuddyMenu(Palette): if self._active_activity_changed_hid is not None: home_model = self._get_home_model() home_model.disconnect(self._active_activity_changed_hid) + self._buddy.disconnect_by_func(self._buddy_icon_changed_cb) + self._buddy.disconnect_by_func(self._buddy_nick_changed_cb) def _add_items(self): friends = shellmodel.get_instance().get_friends() diff --git a/src/view/frame/friendstray.py b/src/view/frame/friendstray.py index b9d8c07..7236d75 100644 --- a/src/view/frame/friendstray.py +++ b/src/view/frame/friendstray.py @@ -83,6 +83,7 @@ class FriendsTray(VTray): def clear(self): for item in self.get_children(): self.remove_item(item) + item.destroy() self._buddies = {} def __activity_appeared_cb(self, pservice, activity_ps): diff --git a/src/view/home/favoritesview.py b/src/view/home/favoritesview.py index b36e664..e89f30f 100644 --- a/src/view/home/favoritesview.py +++ b/src/view/home/favoritesview.py @@ -379,6 +379,10 @@ class CurrentActivityIcon(CanvasIcon, hippo.CanvasItem): self.props.xo_color = home_activity.get_icon_color() self.props.size = style.STANDARD_ICON_SIZE + if self.palette is not None: + self.palette.destroy() + self.palette = None + if home_activity.is_journal(): palette = JournalPalette(home_activity) else: diff --git a/src/view/launchwindow.py b/src/view/launchwindow.py index e4494ad..d954abc 100644 --- a/src/view/launchwindow.py +++ b/src/view/launchwindow.py @@ -79,6 +79,11 @@ class LaunchBox(hippo.CanvasBox): self._home.connect('active-activity-changed', self.__active_activity_changed_cb) + self.connect('destroy', self.__destroy_cb) + + def __destroy_cb(self, box): + self._home.disconnect_by_func(self.__active_activity_changed_cb) + def zoom_in(self): self._activity_icon.props.size = style.STANDARD_ICON_SIZE diff --git a/src/view/palettes.py b/src/view/palettes.py index dc04af8..416ff0f 100644 --- a/src/view/palettes.py +++ b/src/view/palettes.py @@ -123,9 +123,15 @@ class ActivityPalette(Palette): menu_item.show() registry = activity.get_registry() - registry.connect('activity_changed', self.__activity_changed_cb) + self._activity_changed_sid = registry.connect('activity_changed', + self.__activity_changed_cb) self._update_favorite_item() + self.connect('destroy', self.__destroy_cb) + + def __destroy_cb(self, palette): + self.disconnect(self._activity_changed_sid) + def _update_favorite_item(self): label = self._favorite_item.child if self._favorite: -- cgit v0.9.1