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.
This commit is contained in:
Benjamin Otte
2018-03-08 23:24:30 +01:00
parent 792c9d6512
commit dbeaad6a35
3 changed files with 8 additions and 21 deletions

View 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);
}

View 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__ */

View File

@@ -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