From: Benjamin Otte Date: Sat, 10 Mar 2018 19:02:28 +0000 (+0100) Subject: eventcontroller: Make widget no longer a construct-only property X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~22^2~349^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ba7849960e5e3447884f92b58e899aa5db0f0565;p=gtk4.git eventcontroller: Make widget no longer a construct-only property The new API model is now complete. To set a widget on a controller, it is now necessary to call gtk_widget_add_controller(). --- diff --git a/gtk/gtkeventcontroller.c b/gtk/gtkeventcontroller.c index d00f09ce36..aed43c3d5e 100644 --- a/gtk/gtkeventcontroller.c +++ b/gtk/gtkeventcontroller.c @@ -87,17 +87,9 @@ gtk_event_controller_set_property (GObject *object, GParamSpec *pspec) { GtkEventController *self = GTK_EVENT_CONTROLLER (object); - GtkWidget *widget; switch (prop_id) { - case PROP_WIDGET: - widget = g_value_get_object (value); - if (widget) - { - _gtk_widget_add_controller (widget, self, FALSE); - } - break; case PROP_PROPAGATION_PHASE: gtk_event_controller_set_propagation_phase (self, g_value_get_enum (value)); @@ -129,21 +121,6 @@ gtk_event_controller_get_property (GObject *object, } } -static void -gtk_event_controller_dispose (GObject *object) -{ - GtkEventController *controller = GTK_EVENT_CONTROLLER (object); - GtkEventControllerPrivate *priv; - - priv = gtk_event_controller_get_instance_private (controller); - if (priv->widget) - { - gtk_widget_remove_controller (priv->widget, controller); - } - - G_OBJECT_CLASS (gtk_event_controller_parent_class)->dispose (object); -} - static void gtk_event_controller_class_init (GtkEventControllerClass *klass) { @@ -156,7 +133,6 @@ gtk_event_controller_class_init (GtkEventControllerClass *klass) object_class->set_property = gtk_event_controller_set_property; object_class->get_property = gtk_event_controller_get_property; - object_class->dispose = gtk_event_controller_dispose; /** * GtkEventController:widget: @@ -168,7 +144,7 @@ gtk_event_controller_class_init (GtkEventControllerClass *klass) P_("Widget"), P_("Widget the gesture relates to"), GTK_TYPE_WIDGET, - GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); + GTK_PARAM_READABLE); /** * GtkEventController:propagation-phase: * diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 011344d4b3..e7ab8010c7 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -459,7 +459,6 @@ typedef struct { GtkEventController *controller; guint grab_notify_id; guint sequence_state_changed_id; - gboolean have_ref; } EventControllerData; struct _GtkWidgetClassPrivate @@ -12885,20 +12884,32 @@ event_controller_sequence_state_changed (GtkGesture *gesture, cancel_event_sequence_on_hierarchy (widget, event_widget, sequence); } +/** + * gtk_widget_add_controller: + * @widget: a #GtkWidget + * @controller: (transfer full): a #GtkEventController that hasn't been + * added to a widget yet + * + * Adds @controller to @widget so that it will receive events. You will + * usually want to call this function right after creating any kind of + * #GtkEventController. + **/ void -_gtk_widget_add_controller (GtkWidget *widget, - GtkEventController *controller, - gboolean have_ref) +gtk_widget_add_controller (GtkWidget *widget, + GtkEventController *controller) { - GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); + GtkWidgetPrivate *priv; EventControllerData *data; + g_return_if_fail (GTK_IS_WIDGET (widget)); + g_return_if_fail (GTK_IS_EVENT_CONTROLLER (controller)); + g_return_if_fail (gtk_event_controller_get_widget (controller) == NULL); + priv = widget->priv; GTK_EVENT_CONTROLLER_GET_CLASS (controller)->set_widget (controller, widget); data = g_new0 (EventControllerData, 1); - data->have_ref = have_ref; data->controller = controller; data->grab_notify_id = g_signal_connect (widget, "grab-notify", @@ -12917,27 +12928,6 @@ _gtk_widget_add_controller (GtkWidget *widget, priv->event_controllers = g_list_prepend (priv->event_controllers, data); } -/** - * gtk_widget_add_controller: - * @widget: a #GtkWidget - * @controller: (transfer full): a #GtkEventController that hasn't been - * added to a widget yet - * - * Adds @controller to @widget so that it will receive events. You will - * usually want to call this function right after creating any kind of - * #GtkEventController. - **/ -void -gtk_widget_add_controller (GtkWidget *widget, - GtkEventController *controller) -{ - g_return_if_fail (GTK_IS_WIDGET (widget)); - g_return_if_fail (GTK_IS_EVENT_CONTROLLER (controller)); - g_return_if_fail (gtk_event_controller_get_widget (controller) == NULL); - - _gtk_widget_add_controller (widget, controller, TRUE); -} - /** * gtk_widget_remove_controller: * @widget: a #GtkWidget @@ -12984,8 +12974,7 @@ gtk_widget_remove_controller (GtkWidget *widget, g_signal_handler_disconnect (data->controller, data->sequence_state_changed_id); data->controller = NULL; - if (data->have_ref) - g_object_unref (controller); + g_object_unref (controller); } GList * diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h index 2a3df8177b..1fec8a82b3 100644 --- a/gtk/gtkwidgetprivate.h +++ b/gtk/gtkwidgetprivate.h @@ -258,9 +258,6 @@ void _gtk_widget_update_parent_muxer (GtkWidget *widget GtkActionMuxer * _gtk_widget_get_action_muxer (GtkWidget *widget, gboolean create); -void _gtk_widget_add_controller (GtkWidget *widget, - GtkEventController *controller, - gboolean take_ref); GList * _gtk_widget_list_controllers (GtkWidget *widget, GtkPropagationPhase phase); gboolean _gtk_widget_consumes_motion (GtkWidget *widget,