legacycontroller: Port to new API model
authorBenjamin Otte <otte@redhat.com>
Thu, 8 Mar 2018 22:24:30 +0000 (23:24 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 26 Apr 2018 15:59:41 +0000 (17:59 +0200)
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
gtk/gtkeventcontrollerlegacyprivate.h
gtk/gtkwidget.c

index 737312d874f9b83e23865664b60428dccb0692b9..ebe852249b55b7d6d2cef2d3d79a2954d783b9ba 100644 (file)
@@ -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);
 }
index 3ec94260b04c05f2664cfc6e59b3e7d9b70ec812..61059a0f5ec7d4ecdf6880f2785abb9ef039e2d9 100644 (file)
@@ -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__ */
index 50286e39a2de75436c81efe44f5bcac6b16c993f..011344d4b3e482c22bbb8ee95a9d484ff888fde4 100644 (file)
@@ -2947,7 +2947,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 ());
 }
 
 
@@ -13677,16 +13677,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