From dbeaad6a35fbcd9df91fd3f9e070701892443f64 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Thu, 8 Mar 2018 23:24:30 +0100 Subject: [PATCH] legacycontroller: Port to new API model We no longer set the widget on construction, but instead require an explicit call to gtk_widget_add_controller(). This way, the reference handling becomes explicit and bindable. Because gtk_widget_add_controller() is (transfer: full), we don't even need to unref the controller after adding it. And we don't need to keep track of it, because controllers get cleaned up by GtkWidget. --- gtk/gtkeventcontrollerlegacy.c | 11 ++++------- gtk/gtkeventcontrollerlegacyprivate.h | 6 +++--- gtk/gtkwidget.c | 12 +----------- 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/gtk/gtkeventcontrollerlegacy.c b/gtk/gtkeventcontrollerlegacy.c index 737312d874..ebe852249b 100644 --- a/gtk/gtkeventcontrollerlegacy.c +++ b/gtk/gtkeventcontrollerlegacy.c @@ -20,7 +20,7 @@ #include "config.h" #include "gtkeventcontrollerlegacyprivate.h" -G_DEFINE_TYPE (GtkEventControllerLegacy, _gtk_event_controller_legacy, +G_DEFINE_TYPE (GtkEventControllerLegacy, gtk_event_controller_legacy, GTK_TYPE_EVENT_CONTROLLER) static gboolean @@ -33,7 +33,7 @@ gtk_event_controller_legacy_handle_event (GtkEventController *controller, } static void -_gtk_event_controller_legacy_class_init (GtkEventControllerLegacyClass *klass) +gtk_event_controller_legacy_class_init (GtkEventControllerLegacyClass *klass) { GtkEventControllerClass *controller_class = GTK_EVENT_CONTROLLER_CLASS (klass); @@ -41,16 +41,13 @@ _gtk_event_controller_legacy_class_init (GtkEventControllerLegacyClass *klass) } static void -_gtk_event_controller_legacy_init (GtkEventControllerLegacy *controller) +gtk_event_controller_legacy_init (GtkEventControllerLegacy *controller) { } GtkEventController * -_gtk_event_controller_legacy_new (GtkWidget *widget) +gtk_event_controller_legacy_new (void) { - g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); - return g_object_new (GTK_TYPE_EVENT_CONTROLLER_LEGACY, - "widget", widget, NULL); } diff --git a/gtk/gtkeventcontrollerlegacyprivate.h b/gtk/gtkeventcontrollerlegacyprivate.h index 3ec94260b0..61059a0f5e 100644 --- a/gtk/gtkeventcontrollerlegacyprivate.h +++ b/gtk/gtkeventcontrollerlegacyprivate.h @@ -25,7 +25,7 @@ G_BEGIN_DECLS -#define GTK_TYPE_EVENT_CONTROLLER_LEGACY (_gtk_event_controller_legacy_get_type ()) +#define GTK_TYPE_EVENT_CONTROLLER_LEGACY (gtk_event_controller_legacy_get_type ()) #define GTK_EVENT_CONTROLLER_LEGACY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_EVENT_CONTROLLER_LEGACY, GtkEventControllerLegacy)) #define GTK_EVENT_CONTROLLER_LEGACY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GTK_TYPE_EVENT_CONTROLLER_LEGACY, GtkEventControllerLegacyClass)) #define GTK_IS_EVENT_CONTROLLER_LEGACY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_EVENT_CONTROLLER_LEGACY)) @@ -45,7 +45,7 @@ struct _GtkEventControllerLegacyClass GtkEventControllerClass parent_class; }; -GType _gtk_event_controller_legacy_get_type (void) G_GNUC_CONST; -GtkEventController *_gtk_event_controller_legacy_new (GtkWidget *widget); +GType gtk_event_controller_legacy_get_type (void) G_GNUC_CONST; +GtkEventController *gtk_event_controller_legacy_new (void); #endif /* __GTK_EVENT_CONTROLLER_LEGACY_H__ */ diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 0105213cd4..a81befee3b 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -2954,7 +2954,7 @@ gtk_widget_init (GTypeInstance *instance, gpointer g_class) /* need to set correct type here, and only class has the correct type here */ gtk_css_node_set_widget_type (priv->cssnode, G_TYPE_FROM_CLASS (g_class)); - gtk_widget_init_legacy_controller (widget); + gtk_widget_add_controller (widget, gtk_event_controller_legacy_new ()); } @@ -13813,16 +13813,6 @@ gtk_widget_get_pass_through (GtkWidget *widget) return widget->priv->pass_through; } -void -gtk_widget_init_legacy_controller (GtkWidget *widget) -{ - GtkEventController *controller; - - controller = _gtk_event_controller_legacy_new (widget); - g_object_set_data_full (G_OBJECT (widget), I_("gtk-widget-legacy-event-controller"), - controller, g_object_unref); -} - /** * gtk_widget_get_width: * @widget: a #GtkWidget