diff options
Diffstat (limited to 'gtk/gtkeventcontrollerlegacy.c')
-rw-r--r-- | gtk/gtkeventcontrollerlegacy.c | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/gtk/gtkeventcontrollerlegacy.c b/gtk/gtkeventcontrollerlegacy.c index ebe852249b..33b38203f5 100644 --- a/gtk/gtkeventcontrollerlegacy.c +++ b/gtk/gtkeventcontrollerlegacy.c @@ -18,7 +18,28 @@ */ #include "config.h" -#include "gtkeventcontrollerlegacyprivate.h" +#include "gtkeventcontrollerlegacy.h" +#include "gtkeventcontrollerprivate.h" +#include "gtkmarshalers.h" +#include "gtkintl.h" +#include "gtkprivate.h" + +struct _GtkEventControllerLegacy +{ + GtkEventController parent_instance; +}; + +struct _GtkEventControllerLegacyClass +{ + GtkEventControllerClass parent_class; +}; + +enum { + EVENT, + N_SIGNALS +}; + +static guint signals[N_SIGNALS] = { 0, }; G_DEFINE_TYPE (GtkEventControllerLegacy, gtk_event_controller_legacy, GTK_TYPE_EVENT_CONTROLLER) @@ -27,9 +48,11 @@ static gboolean gtk_event_controller_legacy_handle_event (GtkEventController *controller, const GdkEvent *event) { - GtkWidget *widget = gtk_event_controller_get_widget (controller); + gboolean handled; - return gtk_widget_emit_event_signals (widget, event); + g_signal_emit (controller, signals[EVENT], 0, event, &handled); + + return handled; } static void @@ -38,6 +61,29 @@ gtk_event_controller_legacy_class_init (GtkEventControllerLegacyClass *klass) GtkEventControllerClass *controller_class = GTK_EVENT_CONTROLLER_CLASS (klass); controller_class->handle_event = gtk_event_controller_legacy_handle_event; + + /** + * GtkEventController::event: + * @controller: the object which received the signal. + * @event: the #GdkEvent which triggered this signal + * + * The GTK+ main loop will emit this signal for each GDK event delivered + * to @controller. + * + * Returns: %TRUE to stop other handlers from being invoked for the event + * and to cancel the emission of the second specific ::event signal. + * %FALSE to propagate the event further. + */ + signals[EVENT] = + g_signal_new (I_("event"), + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, _gtk_boolean_handled_accumulator, NULL, + _gtk_marshal_BOOLEAN__OBJECT, + G_TYPE_BOOLEAN, 1, + GDK_TYPE_EVENT); + g_signal_set_va_marshaller (signals[EVENT], G_TYPE_FROM_CLASS (klass), + _gtk_marshal_BOOLEAN__OBJECTv); } static void |