[kupfer] helplib: WeakCallback takes a method, not method name.
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [kupfer] helplib: WeakCallback takes a method, not method name.
- Date: Mon, 7 Sep 2009 21:49:47 +0000 (UTC)
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]