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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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__ */
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user