diff --git a/gtk/gtkactionmuxer.c b/gtk/gtkactionmuxer.c index 06660ddf89..94f734ca91 100644 --- a/gtk/gtkactionmuxer.c +++ b/gtk/gtkactionmuxer.c @@ -991,13 +991,15 @@ gtk_action_muxer_unregister_observer (GtkActionObservable *observable, GtkActionObserver *observer) { GtkActionMuxer *muxer = GTK_ACTION_MUXER (observable); - Action *action; + Action *action = find_observers (muxer, name); - action = find_observers (muxer, name); if (action) { - g_object_weak_unref (G_OBJECT (observer), gtk_action_muxer_weak_notify, action); - gtk_action_muxer_unregister_internal (action, observer); + if (g_slist_find (action->watchers, observer) != NULL) + { + g_object_weak_unref (G_OBJECT (observer), gtk_action_muxer_weak_notify, action); + gtk_action_muxer_unregister_internal (action, observer); + } } } @@ -1269,7 +1271,7 @@ gtk_action_muxer_insert (GtkActionMuxer *muxer, if (!muxer->groups) muxer->groups = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gtk_action_muxer_free_group); - group = g_slice_new (Group); + group = g_slice_new0 (Group); group->muxer = muxer; group->group = g_object_ref (action_group); group->prefix = g_strdup (prefix);