diff options
author | Benjamin Otte <otte@redhat.com> | 2018-03-10 20:02:28 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-04-26 17:59:42 +0200 |
commit | ba7849960e5e3447884f92b58e899aa5db0f0565 (patch) | |
tree | b94462d5dbb4f5696ccf5e6115237af442c8b69d | |
parent | c5f12a7326e46869df3b65fd5e23a1508b9ab2e1 (diff) | |
download | gtk+-ba7849960e5e3447884f92b58e899aa5db0f0565.tar.gz |
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().
-rw-r--r-- | gtk/gtkeventcontroller.c | 26 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 47 | ||||
-rw-r--r-- | gtk/gtkwidgetprivate.h | 3 |
3 files changed, 19 insertions, 57 deletions
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)); @@ -130,21 +122,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) { GObjectClass *object_class = G_OBJECT_CLASS (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", @@ -12918,27 +12929,6 @@ _gtk_widget_add_controller (GtkWidget *widget, } /** - * 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 * @controller: (transfer none): a #GtkEventController @@ -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, |