From 22e829e5ffbf8e39d2573772bafe90ed344066d9 Mon Sep 17 00:00:00 2001 From: Jonathon Jongsma Date: Fri, 12 Dec 2008 01:09:55 +0000 Subject: 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 --- ChangeLog | 6 ++++++ glib/glibmm/main.cc | 17 +++++++++++++++++ glib/glibmm/main.h | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/ChangeLog b/ChangeLog index b6fadfc3..aa29d98d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-09-22 Dave Foster + + * 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 * 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& slot, return connection; } +void SignalTimeout::connect_once(const sigc::slot& 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& slot, unsigned int interval, int priority) @@ -333,6 +339,12 @@ sigc::connection SignalTimeout::connect_seconds(const sigc::slot& slot, return connection; } +void SignalTimeout::connect_seconds_once(const sigc::slot& 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& slot, int priority) return connection; } +void SignalIdle::connect_once(const sigc::slot& 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& 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& 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& 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& slot, unsigned int interval, + int priority = PRIORITY_DEFAULT); + private: GMainContext* context_; @@ -222,6 +253,12 @@ public: */ sigc::connection connect(const sigc::slot& 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& slot, int priority = PRIORITY_DEFAULT_IDLE); + private: GMainContext* context_; -- cgit v1.2.1