[glibmm] Gio::Settings: Replace connect_changed() by signal_changed(key)



commit d2a6547a99b8d63d7d20e16fb268910fab4e69b8
Author: Kjell Ahlstedt <kjell ahlstedt bredband net>
Date:   Sat May 23 08:52:42 2015 +0200

    Gio::Settings: Replace connect_changed() by signal_changed(key)
    
    * gio/src/settings.[hg|ccg]: Add signal_changed(key). Remove connect_changed().
    * examples/settings/settings.cc: Test signal_changed(key). Bug #749034.

 examples/settings/settings.cc |   14 ++++++++++++++
 gio/src/settings.ccg          |   15 ---------------
 gio/src/settings.hg           |   16 ++--------------
 3 files changed, 16 insertions(+), 29 deletions(-)
---
diff --git a/examples/settings/settings.cc b/examples/settings/settings.cc
index b7ce0ca..bbf1c19 100644
--- a/examples/settings/settings.cc
+++ b/examples/settings/settings.cc
@@ -50,6 +50,18 @@ static void on_key_changed(const Glib::ustring& key, const Glib::RefPtr<Gio::Set
     std::cerr << "Unknown key\n";
 }
 
+static void on_key_changed_all(const Glib::ustring& key)
+{
+  std::cout << "on_key_changed_all(" << key << ")\n";
+}
+
+static void on_key_changed_int(const Glib::ustring& key)
+{
+  std::cout << "on_key_changed_int(" << key << ")\n";
+  if (key != INT_KEY)
+    std::cerr << "Unexpected key\n";
+}
+
 int main(int, char**)
 {
   std::locale::global(std::locale(""));
@@ -67,6 +79,8 @@ int main(int, char**)
     Gio::Settings::create("org.gtkmm.demo");
 
   settings->signal_changed().connect(sigc::bind(sigc::ptr_fun(&on_key_changed), settings));
+  settings->signal_changed("").connect(sigc::ptr_fun(&on_key_changed_all));
+  settings->signal_changed(INT_KEY).connect(sigc::ptr_fun(&on_key_changed_int));
 
   std::cout << Glib::ustring::compose("Initial value of '%1': '%2'\n",
                     STRING_KEY, settings->get_string(STRING_KEY));
diff --git a/gio/src/settings.ccg b/gio/src/settings.ccg
index 8fa0860..d800aa9 100644
--- a/gio/src/settings.ccg
+++ b/gio/src/settings.ccg
@@ -18,7 +18,6 @@
 #include <gio/gio.h>
 #include <glibmm/exceptionhandler.h>
 #include <glibmm/vectorutils.h>
-#include <glibmm/propertyproxy_base.h> //For PropertyProxyConnectionNode
 
 namespace Gio
 {
@@ -71,18 +70,4 @@ std::vector<Glib::ustring> Settings::list_schemas()
 }
 _DEPRECATE_IFDEF_END
 
-sigc::connection Settings::connect_changed(const Glib::ustring& key, const SlotChanged& slot)
-{
-  // Create a proxy to hold our connection info
-  // This will be deleted by destroy_notify_handler.
-  Glib::PropertyProxyConnectionNode* pConnectionNode = new Glib::PropertyProxyConnectionNode(slot, 
G_OBJECT(gobj()));
-
-  const Glib::ustring signal_name = "changed::" + key;
-  g_signal_connect_data(gobj(),
-    signal_name.c_str(), (GCallback)(&Glib::PropertyProxyConnectionNode::callback), pConnectionNode,
-    &Glib::PropertyProxyConnectionNode::destroy_notify_handler,
-    G_CONNECT_AFTER);
-  return sigc::connection(pConnectionNode->slot_);
-}
-
 }
diff --git a/gio/src/settings.hg b/gio/src/settings.hg
index abb50e9..4303619 100644
--- a/gio/src/settings.hg
+++ b/gio/src/settings.hg
@@ -201,19 +201,6 @@ _DEPRECATE_IFDEF_END
 
   //TODO?: _WRAP_PROPERTY("backend", Glib::RefPtr<SettingsBackend>)
 
-  /** See connect_changed().
-   * @newin{2,46}
-   */
-  typedef sigc::slot<void> SlotChanged;
-
-  /** Connect a callback @a slot to the "changed" signal for the @a key.
-   * This will be emitted whenever the the value for that key has been changed.
-   * @result A sigc::connection
-   *
-   * @newin{2,46}
-   */
-  sigc::connection connect_changed(const Glib::ustring& key, const SlotChanged& slot);
-
   _WRAP_PROPERTY("delay-apply", bool)
   _WRAP_PROPERTY("has-unapplied", bool)
   _WRAP_PROPERTY("path", std::string)
@@ -224,8 +211,9 @@ _DEPRECATE_IFDEF_END
 
   //TODO?: _WRAP_SIGNAL(bool change_event(const Glib::ArrayHandle<Glib::QueryQuark>& keys, int n_keys), 
"change-event")
 
+  //TODO: Remove two_signal_methods when we can break ABI.
 #m4 _CONVERSION(`const char*',`const Glib::ustring&',__GCHARP_TO_USTRING)
-  _WRAP_SIGNAL(void changed(const Glib::ustring& key), "changed")
+  _WRAP_SIGNAL(void changed(const Glib::ustring& key), "changed", detail_name key, two_signal_methods)
 
   _WRAP_SIGNAL(bool writable_change_event(guint key), "writable-change-event")
   _WRAP_SIGNAL(void writable_changed(const Glib::ustring& key), writable_changed)


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