[glib] Add 'change-state' signal to GSimpleAction
- From: Javier JardÃn <jjardon src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Add 'change-state' signal to GSimpleAction
- Date: Wed, 29 Jun 2011 15:22:46 +0000 (UTC)
commit 9a23ef6c2da48cd7f5c513f24ff478d6c5fab4d6
Author: Ryan Lortie <desrt desrt ca>
Date: Wed Jun 29 14:35:12 2011 +0100
Add 'change-state' signal to GSimpleAction
If connected, allows the user to control the result of
g_action_change_state().
gio/gsimpleaction.c | 39 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 38 insertions(+), 1 deletions(-)
---
diff --git a/gio/gsimpleaction.c b/gio/gsimpleaction.c
index 915a2e6..0f26c0f 100644
--- a/gio/gsimpleaction.c
+++ b/gio/gsimpleaction.c
@@ -65,6 +65,7 @@ enum
enum
{
+ SIGNAL_CHANGE_STATE,
SIGNAL_ACTIVATE,
NR_SIGNALS
};
@@ -118,7 +119,15 @@ g_simple_action_change_state (GAction *action,
{
GSimpleAction *simple = G_SIMPLE_ACTION (action);
- g_simple_action_set_state (simple, value);
+ /* If the user connected a signal handler then they are responsible
+ * for handling state changes.
+ */
+ if (g_signal_has_handler_pending (action, g_simple_action_signals[SIGNAL_CHANGE_STATE], 0, TRUE))
+ g_signal_emit (action, g_simple_action_signals[SIGNAL_CHANGE_STATE], 0, value);
+
+ /* If not, then the default behaviour is to just set the state. */
+ else
+ g_simple_action_set_state (simple, value);
}
/**
@@ -326,6 +335,34 @@ g_simple_action_class_init (GSimpleActionClass *class)
G_TYPE_VARIANT);
/**
+ * GSimpleAction::change-state:
+ * @simple: the #GSimpleAction
+ * @value: (allow-none): the requested value for the state
+ *
+ * Indicates that the action just received a request to change its
+ * state.
+ *
+ * @value will always be of the correct state type. In the event that
+ * an incorrect type was given, no signal will be emitted.
+ *
+ * If no handler is connected to this signal then the default
+ * behaviour is to call g_simple_action_set_state() to set the state
+ * to the requested value. If you connect a signal handler then no
+ * default action is taken. If the state should change then you must
+ * call g_simple_action_set_state() from the handler.
+ *
+ * Since: 2.30
+ */
+ g_simple_action_signals[SIGNAL_CHANGE_STATE] =
+ g_signal_new (I_("change-state"),
+ G_TYPE_SIMPLE_ACTION,
+ G_SIGNAL_RUN_LAST | G_SIGNAL_MUST_COLLECT,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VARIANT,
+ G_TYPE_NONE, 1,
+ G_TYPE_VARIANT);
+
+ /**
* GSimpleAction:name:
*
* The name of the action. This is mostly meaningful for identifying
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]