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));
}
}
-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)
{
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:
P_("Widget"),
P_("Widget the gesture relates to"),
GTK_TYPE_WIDGET,
- GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY);
+ GTK_PARAM_READABLE);
/**
* GtkEventController:propagation-phase:
*
GtkEventController *controller;
guint grab_notify_id;
guint sequence_state_changed_id;
- gboolean have_ref;
} EventControllerData;
struct _GtkWidgetClassPrivate
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",
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
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 *