GActionMuxer: disconnect group signals on finalize

The signals for the action group were being disconnected when the action
group was explicitly removed from the GActionMuxer but the same was not
being done when it was finalized.

This means that a change in the state of an action group that used to be
associated with a finalized GActionMuxer would result in a crash.  This
would happen for stateful application actions after closing a window.

https://bugzilla.gnome.org/show_bug.cgi?id=681399
This commit is contained in:
Ryan Lortie 2012-06-28 23:55:33 -04:00 committed by Florian Müllner
parent 7d6c85be42
commit 1118ec9653

View File

@ -392,6 +392,11 @@ static void
g_action_muxer_free_group (gpointer data) g_action_muxer_free_group (gpointer data)
{ {
Group *group = data; Group *group = data;
gint i;
/* 'for loop' or 'four loop'? */
for (i = 0; i < 4; i++)
g_signal_handler_disconnect (group->group, group->handler_ids[i]);
g_object_unref (group->group); g_object_unref (group->group);
g_free (group->prefix); g_free (group->prefix);
@ -525,10 +530,6 @@ g_action_muxer_remove (GActionMuxer *muxer,
g_action_muxer_action_removed (group->group, actions[i], group); g_action_muxer_action_removed (group->group, actions[i], group);
g_strfreev (actions); g_strfreev (actions);
/* 'for loop' or 'four loop'? */
for (i = 0; i < 4; i++)
g_signal_handler_disconnect (group->group, group->handler_ids[i]);
g_action_muxer_free_group (group); g_action_muxer_free_group (group);
} }
} }