[kupfer] helplib: WeakCallback takes a method, not method name.



commit 642cb83603bd222d5687d7d08a75d8eca07eb5d1
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Thu Sep 3 19:16:15 2009 +0200

    helplib: WeakCallback takes a method, not method name.
    
    WeakCallback takes a method self._changed instead of a method name
    "_changed"; it will still only save the attribute name though. This
    allows even more natural syntax.

 kupfer/helplib.py                  |   14 ++++++++------
 kupfer/plugin/clipboard.py         |    2 +-
 kupfer/plugin/documents.py         |    2 +-
 kupfer/plugin/nautilusselection.py |    2 +-
 kupfer/plugin/selection.py         |    2 +-
 5 files changed, 12 insertions(+), 10 deletions(-)
---
diff --git a/kupfer/helplib.py b/kupfer/helplib.py
index 054df32..a126306 100644
--- a/kupfer/helplib.py
+++ b/kupfer/helplib.py
@@ -18,9 +18,11 @@ class WeakCallback (object):
 		sender.disconnect(gobject_token)
 		dbus_token.remove()
 	"""
-	def __init__(self, obj, attr):
-		"""Create a new Weak Callback calling the method @obj  attr"""
-		self.wref = weakref.ref(obj)
+	def __init__(self, mcallback):
+		"""Create a new Weak Callback calling the method @mcallback"""
+		obj = mcallback.im_self
+		attr = mcallback.im_func.__name__
+		self.wref = weakref.ref(obj, self.object_deleted)
 		self.callback_attr = attr
 		self.gobject_token = None
 		self.dbus_token = None
@@ -40,9 +42,9 @@ class WeakCallback (object):
 			self.dbus_token.remove()
 			self.dbus_token = None
 
-def gobject_connect_weakly(sender, signal, connector, attr, *user_args):
+def gobject_connect_weakly(sender, signal, mcallback, *user_args):
 	"""Connect weakly to GObject @sender's @signal,
-	with a callback in @connector named @attr.
+	with a callback method @mcallback
 	"""
-	wc = WeakCallback(connector, attr)
+	wc = WeakCallback(mcallback)
 	wc.gobject_token = sender.connect(signal, wc, *user_args)
diff --git a/kupfer/plugin/clipboard.py b/kupfer/plugin/clipboard.py
index bd66271..434656c 100644
--- a/kupfer/plugin/clipboard.py
+++ b/kupfer/plugin/clipboard.py
@@ -43,7 +43,7 @@ class ClipboardSource (Source, PicklingHelperMixin):
 	def unpickle_finish(self):
 		"""Setup change callback on unpickling"""
 		clip = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD)
-		gobject_connect_weakly(clip, "owner-change", self, "_clipboard_changed")
+		gobject_connect_weakly(clip, "owner-change", self._clipboard_changed)
 
 	def _clipboard_changed(self, clip, *args):
 		max_len = __kupfer_settings__["max"]
diff --git a/kupfer/plugin/documents.py b/kupfer/plugin/documents.py
index 2ad8829..acd733f 100644
--- a/kupfer/plugin/documents.py
+++ b/kupfer/plugin/documents.py
@@ -36,7 +36,7 @@ class RecentsSource (Source, PicklingHelperMixin):
 	def unpickle_finish(self):
 		"""Set up change callback"""
 		manager = recent_manager_get_default()
-		gobject_connect_weakly(manager, "changed", self, "_recent_changed")
+		gobject_connect_weakly(manager, "changed", self._recent_changed)
 
 	def _recent_changed(self, *args):
 		# FIXME: We don't get single item updates, might this be
diff --git a/kupfer/plugin/nautilusselection.py b/kupfer/plugin/nautilusselection.py
index ffbf65e..13f6b0e 100644
--- a/kupfer/plugin/nautilusselection.py
+++ b/kupfer/plugin/nautilusselection.py
@@ -39,7 +39,7 @@ class SelectionSource (Source, PicklingHelperMixin):
 			session_bus = dbus.Bus()
 		except dbus.DBusException:
 			return
-		callback = WeakCallback(self, "_selected_signal")
+		callback = WeakCallback(self._selected_signal)
 		callback.dbus_token = session_bus.add_signal_receiver(
 				callback,
 				"SelectionChanged",
diff --git a/kupfer/plugin/selection.py b/kupfer/plugin/selection.py
index 742f5e3..51d574c 100644
--- a/kupfer/plugin/selection.py
+++ b/kupfer/plugin/selection.py
@@ -36,7 +36,7 @@ class SelectionSource (Source, PicklingHelperMixin):
 
 	def unpickle_finish(self):
 		clip = gtk.clipboard_get(gtk.gdk.SELECTION_PRIMARY)
-		gobject_connect_weakly(clip, "owner-change", self, "_clipboard_changed")
+		gobject_connect_weakly(clip, "owner-change", self._clipboard_changed)
 		self._text = None
 
 	def _clipboard_changed(self, clipboard, event):



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]