summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2018-03-10 20:02:28 +0100
committerBenjamin Otte <otte@redhat.com>2018-04-05 20:23:33 +0200
commit01e88743ef80cffe1bb1a1ea5bd65e23061178c1 (patch)
treefcd59936e08f84a12497570fdabbf79a278df40c
parentdfa7f99336cf1f7d678a66d760a45ff34a2c7a0b (diff)
downloadgtk+-wip/otte/controller.tar.gz
eventcontroller: Make widget no longer a construct-only propertywip/otte/controller
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.c26
-rw-r--r--gtk/gtkwidget.c45
-rw-r--r--gtk/gtkwidgetprivate.h3
3 files changed, 18 insertions, 56 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 a81befee3b..947e7d0fe6 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
@@ -12999,11 +12998,24 @@ 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)
{
+ 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);
+
EventControllerData *data;
GtkWidgetPrivate *priv;
@@ -13012,7 +13024,6 @@ _gtk_widget_add_controller (GtkWidget *widget,
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",
@@ -13032,27 +13043,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
@@ -13098,8 +13088,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 1896518e16..ff5fc90fda 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -262,9 +262,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,