[glibmm] add Gio::Cancellable::connect() and disconnect()



commit 9431f948b104acbc5b6819d80b13716c0ccbef55
Author: Jonathon Jongsma <jonathon quotidian org>
Date:   Sun May 17 00:04:57 2009 -0500

    add Gio::Cancellable::connect() and disconnect()
---
 ChangeLog               |    5 +++++
 gio/src/cancellable.ccg |   27 +++++++++++++++++++++++++++
 gio/src/cancellable.hg  |    7 +++++++
 3 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d2a6933..1815776 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2009-05-16  Jonathon Jongsma  <jonathon quotidian org>
 
+	* gio/src/cancellable.ccg:
+	* gio/src/cancellable.hg: add connect() and disconnect() functions
+
+2009-05-16  Jonathon Jongsma  <jonathon quotidian org>
+
 	* gio/src/gio_docs.xml:
 	* gio/src/gio_methods.defs: update some defs
 
diff --git a/gio/src/cancellable.ccg b/gio/src/cancellable.ccg
index f87a48e..b9b0723 100644
--- a/gio/src/cancellable.ccg
+++ b/gio/src/cancellable.ccg
@@ -21,5 +21,32 @@
 
 namespace Gio {
 
+extern "C" {
+
+void delete_slot(gpointer data)
+{
+    Cancellable::SlotCancelledCallback* callback =
+        reinterpret_cast<Cancellable::SlotCancelledCallback*>(data);
+    delete callback;
+}
+
+void slot_cancelled_proxy(GCancellable * /*cancellable*/, gpointer data)
+{
+    Cancellable::SlotCancelledCallback* callback =
+        reinterpret_cast<Cancellable::SlotCancelledCallback*>(data);
+    (*callback)();
+}
+
+} // extern "C"
+
+gulong
+Cancellable::connect(const SlotCancelledCallback& callback)
+{
+    SlotCancelledCallback* slot_copy = new SlotCancelledCallback(callback);
+    return g_cancellable_connect (gobj(),
+                                  G_CALLBACK(slot_cancelled_proxy),
+                                  slot_copy,
+                                  &delete_slot);
+}
 
 } // namespace Gio
diff --git a/gio/src/cancellable.hg b/gio/src/cancellable.hg
index 777d0e0..9a9c9b2 100644
--- a/gio/src/cancellable.hg
+++ b/gio/src/cancellable.hg
@@ -39,6 +39,8 @@ protected:
   _CTOR_DEFAULT
 
 public:
+  typedef sigc::slot<void> SlotCancelledCallback;
+
   _WRAP_CREATE()
 
   _WRAP_METHOD(bool is_cancelled() const, g_cancellable_is_cancelled)
@@ -62,6 +64,11 @@ public:
   // TODO: is this useful in the C++ API?
   //_WRAP_METHOD(void make_pollfd(PollFD* pollfd), g_cancellable_make_pollfd)
 
+  _WRAP_METHOD_DOCS_ONLY(g_cancellable_connect)
+  gulong connect(const SlotCancelledCallback& callback);
+  _IGNORE(g_cancellable_connect)
+  _WRAP_METHOD(void disconnect(gulong handler_id), g_cancellable_disconnect)
+
   _WRAP_SIGNAL(void cancelled(), cancelled)
 };
 



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