From 95caf23ddd3b7183498340411ef51edf7d365ad8 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 27 Jan 2009 00:25:21 +0000 Subject: [PATCH] Block the previous action when calling reset() to prevent accidental * gtk/gtkactivatable.c (gtk_activatable_do_set_related_action): Block the previous action when calling reset() to prevent accidental activation of the previous action. * gtk/gtkaction.c (gtk_action_activate): Don't compare booleans. * gtk/gtktoggleaction.c (gtk_toggle_action_set_active): Remove extraneous braces. svn path=/trunk/; revision=22225 --- ChangeLog | 11 +++++++++++ gtk/gtkaction.c | 6 ++++-- gtk/gtkactivatable.c | 14 ++++++++++++-- gtk/gtktoggleaction.c | 4 +--- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index a6def620d..4ce10435d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2009-01-26 Matthias Clasen + + * gtk/gtkactivatable.c (gtk_activatable_do_set_related_action): + Block the previous action when calling reset() to prevent + accidental activation of the previous action. + + * gtk/gtkaction.c (gtk_action_activate): Don't compare booleans. + + * gtk/gtktoggleaction.c (gtk_toggle_action_set_active): Remove + extraneous braces. + 2009-01-26 Bastien Nocera Bug 569240 - Crasher when using markers diff --git a/gtk/gtkaction.c b/gtk/gtkaction.c index 6d29ca4e3..9ce778eae 100644 --- a/gtk/gtkaction.c +++ b/gtk/gtkaction.c @@ -750,8 +750,10 @@ gtk_action_activate (GtkAction *action) { g_return_if_fail (GTK_IS_ACTION (action)); - if (action->private_data->activate_blocked == FALSE && - gtk_action_is_sensitive (action)) + if (action->private_data->activate_blocked) + return; + + if (gtk_action_is_sensitive (action)) _gtk_action_emit_activate (action); } diff --git a/gtk/gtkactivatable.c b/gtk/gtkactivatable.c index 8a0914385..198c8ba97 100644 --- a/gtk/gtkactivatable.c +++ b/gtk/gtkactivatable.c @@ -443,12 +443,16 @@ gtk_activatable_do_set_related_action (GtkActivatable *activatable, _gtk_action_remove_from_proxy_list (prev_action, GTK_WIDGET (activatable)); - g_object_unref (prev_action); - /* Some apps are using the object data directly... * so continue to set it for a bit longer */ g_object_set_data (activatable, "gtk-action", NULL); + + /* + * We don't want prev_action to be activated + * during the reset() call when syncing "active". + */ + gtk_action_block_activate (prev_action); } /* Some applications rely on their proxy UI to be set up @@ -457,6 +461,12 @@ gtk_activatable_do_set_related_action (GtkActivatable *activatable, */ gtk_activatable_reset (activatable, action); + if (prev_action) + { + gtk_action_unblock_activate (prev_action); + g_object_unref (prev_action); + } + if (action) { g_object_ref (action); diff --git a/gtk/gtktoggleaction.c b/gtk/gtktoggleaction.c index 19930ecef..42217fc92 100644 --- a/gtk/gtktoggleaction.c +++ b/gtk/gtktoggleaction.c @@ -267,9 +267,7 @@ gtk_toggle_action_set_active (GtkToggleAction *action, is_active = is_active != FALSE; if (action->private_data->active != is_active) - { - _gtk_action_emit_activate (GTK_ACTION (action)); - } + _gtk_action_emit_activate (GTK_ACTION (action)); } /** -- 2.43.2