[gtk+] GtkActionHelper: Allow a NULL action-name to unset the previous GAction
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkActionHelper: Allow a NULL action-name to unset the previous GAction
- Date: Tue, 13 Jun 2017 19:59:48 +0000 (UTC)
commit 33b3985440b2c264085928b639732bd044b1d522
Author: Debarshi Ray <debarshir gnome org>
Date: Fri Jun 9 12:15:53 2017 +0200
GtkActionHelper: Allow a NULL action-name to unset the previous GAction
https://bugzilla.gnome.org/show_bug.cgi?id=783587
gtk/gtkactionhelper.c | 70 ++++++++++++++++++++++++++++---------------------
1 files changed, 40 insertions(+), 30 deletions(-)
---
diff --git a/gtk/gtkactionhelper.c b/gtk/gtkactionhelper.c
index 6a77b03..242528c 100644
--- a/gtk/gtkactionhelper.c
+++ b/gtk/gtkactionhelper.c
@@ -41,7 +41,8 @@ static void gtk_action_helper_action_added (GtkActi
GVariant *state,
gboolean
should_emit_signals);
-static void gtk_action_helper_action_removed (GtkActionHelper *helper);
+static void gtk_action_helper_action_removed (GtkActionHelper *helper,
+ gboolean
should_emit_signals);
static void gtk_action_helper_action_enabled_changed (GtkActionHelper *helper,
gboolean enabled);
@@ -190,7 +191,8 @@ gtk_action_helper_action_added (GtkActionHelper *helper,
}
static void
-gtk_action_helper_action_removed (GtkActionHelper *helper)
+gtk_action_helper_action_removed (GtkActionHelper *helper,
+ gboolean should_emit_signals)
{
GTK_NOTE(ACTIONS, g_message ("%s: action %s was removed", "actionhelper", helper->action_name));
@@ -202,13 +204,17 @@ gtk_action_helper_action_removed (GtkActionHelper *helper)
if (helper->enabled)
{
helper->enabled = FALSE;
- gtk_action_helper_report_change (helper, PROP_ENABLED);
+
+ if (should_emit_signals)
+ gtk_action_helper_report_change (helper, PROP_ENABLED);
}
if (helper->active)
{
helper->active = FALSE;
- gtk_action_helper_report_change (helper, PROP_ACTIVE);
+
+ if (should_emit_signals)
+ gtk_action_helper_report_change (helper, PROP_ACTIVE);
}
}
@@ -327,7 +333,7 @@ gtk_action_helper_observer_action_removed (GtkActionObserver *observer,
GtkActionObservable *observable,
const gchar *action_name)
{
- gtk_action_helper_action_removed (GTK_ACTION_HELPER (observer));
+ gtk_action_helper_action_removed (GTK_ACTION_HELPER (observer), TRUE);
}
static void
@@ -421,40 +427,44 @@ gtk_action_helper_set_action_name (GtkActionHelper *helper,
"it is unlikely to work",
"actionhelper", action_name));
+ /* Start by recording the current state of our properties so we know
+ * what notify signals we will need to send.
+ */
+ was_enabled = helper->enabled;
+ was_active = helper->active;
+
if (helper->action_name)
{
+ gtk_action_helper_action_removed (helper, FALSE);
gtk_action_observable_unregister_observer (GTK_ACTION_OBSERVABLE (helper->action_context),
helper->action_name,
GTK_ACTION_OBSERVER (helper));
- g_free (helper->action_name);
+ g_clear_pointer (&helper->action_name, g_free);
}
- helper->action_name = g_strdup (action_name);
-
- gtk_action_observable_register_observer (GTK_ACTION_OBSERVABLE (helper->action_context),
- helper->action_name,
- GTK_ACTION_OBSERVER (helper));
+ if (action_name)
+ {
+ helper->action_name = g_strdup (action_name);
- /* Start by recording the current state of our properties so we know
- * what notify signals we will need to send.
- */
- was_enabled = helper->enabled;
- was_active = helper->active;
+ gtk_action_observable_register_observer (GTK_ACTION_OBSERVABLE (helper->action_context),
+ helper->action_name,
+ GTK_ACTION_OBSERVER (helper));
- if (g_action_group_query_action (G_ACTION_GROUP (helper->action_context), helper->action_name,
- &enabled, ¶meter_type, NULL, NULL, &state))
- {
- GTK_NOTE(ACTIONS, g_message ("%s: action %s existed from the start", "actionhelper",
helper->action_name));
+ if (g_action_group_query_action (G_ACTION_GROUP (helper->action_context), helper->action_name,
+ &enabled, ¶meter_type, NULL, NULL, &state))
+ {
+ GTK_NOTE(ACTIONS, g_message ("%s: action %s existed from the start", "actionhelper",
helper->action_name));
- gtk_action_helper_action_added (helper, enabled, parameter_type, state, FALSE);
+ gtk_action_helper_action_added (helper, enabled, parameter_type, state, FALSE);
- if (state)
- g_variant_unref (state);
- }
- else
- {
- GTK_NOTE(ACTIONS, g_message ("%s: action %s missing from the start", "actionhelper",
helper->action_name));
- helper->enabled = FALSE;
+ if (state)
+ g_variant_unref (state);
+ }
+ else
+ {
+ GTK_NOTE(ACTIONS, g_message ("%s: action %s missing from the start", "actionhelper",
helper->action_name));
+ helper->enabled = FALSE;
+ }
}
/* Send the notifies for the properties that changed.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]