diff --git a/gtk/gtkactionmuxer.c b/gtk/gtkactionmuxer.c index 256406fa81..f84173fe05 100644 --- a/gtk/gtkactionmuxer.c +++ b/gtk/gtkactionmuxer.c @@ -533,24 +533,15 @@ prop_action_notify (GObject *object, GParamSpec *pspec, gpointer user_data) { - GtkActionMuxer *muxer = user_data; - GtkWidgetClass *klass = GTK_WIDGET_GET_CLASS (muxer->widget); - GtkWidgetClassPrivate *priv = klass->priv; - GtkWidgetAction *action = NULL; + GtkWidget *widget = GTK_WIDGET (object); + GtkWidgetAction *action = user_data; + GtkActionMuxer *muxer = _gtk_widget_get_action_muxer (widget, TRUE); GVariant *state; - g_assert ((GObject *)muxer->widget == object); - - for (action = priv->actions; action; action = action->next) - { - if (action->pspec == pspec) - break; - } - - g_assert (action != NULL); + g_assert (muxer->widget == widget); g_assert (action->pspec == pspec); - state = prop_action_get_state (muxer->widget, action); + state = prop_action_get_state (widget, action); gtk_action_muxer_action_state_changed (muxer, action->name, state); g_variant_unref (state); } @@ -561,6 +552,7 @@ prop_actions_connect (GtkActionMuxer *muxer) GtkWidgetClassPrivate *priv; GtkWidgetAction *action; GtkWidgetClass *klass; + guint signal_id; if (!muxer->widget) return; @@ -570,17 +562,20 @@ prop_actions_connect (GtkActionMuxer *muxer) if (!priv->actions) return; + signal_id = g_signal_lookup ("notify", G_TYPE_OBJECT); + for (action = priv->actions; action; action = action->next) { - char *detailed; - if (!action->pspec) continue; - detailed = g_strconcat ("notify::", action->pspec->name, NULL); - g_signal_connect (muxer->widget, detailed, - G_CALLBACK (prop_action_notify), muxer); - g_free (detailed); + g_signal_connect_closure_by_id (muxer->widget, + signal_id, + g_param_spec_get_name_quark (action->pspec), + g_cclosure_new (G_CALLBACK (prop_action_notify), + action, + NULL), + FALSE); } }