summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@src.gnome.org>2008-12-12 01:09:55 +0000
committerJonathon Jongsma <jjongsma@src.gnome.org>2008-12-12 01:09:55 +0000
commit22e829e5ffbf8e39d2573772bafe90ed344066d9 (patch)
treec255852cbbe95016bee44c0feeae6b966a554f45
parenta556ef798a4ecbe69c52b9377e613deaf8c35ac7 (diff)
downloadglibmm-22e829e5ffbf8e39d2573772bafe90ed344066d9.tar.gz
Add convenience functions for one-shot timer/idle handlers
* glib/glibmm/main.h: * glib/glibmm/main.cc: Added SignalIdle::connect_once, SignalTimeout::connect_once, and SignalTimeout::connect_seconds_once. svn path=/trunk/; revision=750
-rw-r--r--ChangeLog6
-rw-r--r--glib/glibmm/main.cc17
-rw-r--r--glib/glibmm/main.h37
3 files changed, 60 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index b6fadfc3..aa29d98d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-09-22 Dave Foster <daf@minuslab.net>
+
+ * glib/glibmm/main.h:
+ * glib/glibmm/main.cc: Added SignalIdle::connect_once,
+ SignalTimeout::connect_once, and SignalTimeout::connect_seconds_once.
+
2008-12-10 Przemysław Grzegorczyk <pgrzegorczyk@gmail.com>
* Cleaned up glib includes since in the future, only glib.h (and
diff --git a/glib/glibmm/main.cc b/glib/glibmm/main.cc
index 16d3f595..b47f43ea 100644
--- a/glib/glibmm/main.cc
+++ b/glib/glibmm/main.cc
@@ -310,6 +310,12 @@ sigc::connection SignalTimeout::connect(const sigc::slot<bool>& slot,
return connection;
}
+void SignalTimeout::connect_once(const sigc::slot<void>& slot,
+ unsigned int interval, int priority)
+{
+ connect(sigc::bind_return(slot, false), interval, priority);
+}
+
/* Note that this is our equivalent of g_timeout_add_seconds(). */
sigc::connection SignalTimeout::connect_seconds(const sigc::slot<bool>& slot,
unsigned int interval, int priority)
@@ -333,6 +339,12 @@ sigc::connection SignalTimeout::connect_seconds(const sigc::slot<bool>& slot,
return connection;
}
+void SignalTimeout::connect_seconds_once(const sigc::slot<void>& slot,
+ unsigned int interval, int priority)
+{
+ connect_seconds(sigc::bind_return(slot, false), interval, priority);
+}
+
SignalTimeout signal_timeout()
{
return SignalTimeout(0); // 0 means default context
@@ -368,6 +380,11 @@ sigc::connection SignalIdle::connect(const sigc::slot<bool>& slot, int priority)
return connection;
}
+void SignalIdle::connect_once(const sigc::slot<void>& slot, int priority)
+{
+ connect(sigc::bind_return(slot, false), priority);
+}
+
SignalIdle signal_idle()
{
return SignalIdle(0); // 0 means default context
diff --git a/glib/glibmm/main.h b/glib/glibmm/main.h
index 2d0b157c..85d7bcaf 100644
--- a/glib/glibmm/main.h
+++ b/glib/glibmm/main.h
@@ -160,6 +160,20 @@ public:
sigc::connection connect(const sigc::slot<bool>& slot, unsigned int interval,
int priority = PRIORITY_DEFAULT);
+ /** Connects an timeout handler that runs only once.
+ * This method takes a function pointer to a function with a void return
+ * and no parameters. After running once it is not called again.
+ *
+ * @see connect
+ * @param slot A slot to call when @a interval has elapsed. For example:
+ * @code
+ * void on_timeout_once()
+ * @endcode
+ * @param interval The timeout in milliseconds.
+ * @param priority The priority of the new event source.
+ */
+ void connect_once(const sigc::slot<void>& slot, unsigned int interval,
+ int priority = PRIORITY_DEFAULT);
/** Connects a timeout handler with whole second granularity.
*
@@ -191,6 +205,23 @@ public:
sigc::connection connect_seconds(const sigc::slot<bool>& slot, unsigned int interval,
int priority = PRIORITY_DEFAULT);
+ /** Connects an timeout handler that runs only once with whole second
+ * granularity.
+ *
+ * This method takes a function pointer to a function with a void return
+ * and no parameters. After running once it is not called again.
+ *
+ * @see connect_seconds
+ * @param slot A slot to call when @a interval has elapsed. For example:
+ * @code
+ * void on_timeout_once()
+ * @endcode
+ * @param interval The timeout in milliseconds.
+ * @param priority The priority of the new event source.
+ */
+ void connect_seconds_once(const sigc::slot<void>& slot, unsigned int interval,
+ int priority = PRIORITY_DEFAULT);
+
private:
GMainContext* context_;
@@ -222,6 +253,12 @@ public:
*/
sigc::connection connect(const sigc::slot<bool>& slot, int priority = PRIORITY_DEFAULT_IDLE);
+ /** Connects an idle handler that runs only once.
+ * This method takes a function pointer to a function with a void return
+ * and no parameters. After running once it is not called again.
+ */
+ void connect_once(const sigc::slot<void>& slot, int priority = PRIORITY_DEFAULT_IDLE);
+
private:
GMainContext* context_;