Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2008-09-18 12:13:42 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2008-09-18 12:50:08 (GMT)
commitf74196ab62feda4729de279cb57873ac4eae6553 (patch)
tree9c1722cd7aa0f43164be32acd7612f1e90443a50
parentf6a68fe36c8505aa935c043e93efd2e90a13a432 (diff)
#8485 Disconnect some signals to prevent mem leaks.
-rw-r--r--src/model/homeactivity.py10
-rw-r--r--src/view/BuddyMenu.py2
-rw-r--r--src/view/frame/friendstray.py1
-rw-r--r--src/view/home/favoritesview.py4
-rw-r--r--src/view/launchwindow.py5
-rw-r--r--src/view/palettes.py8
6 files changed, 26 insertions, 4 deletions
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: