summaryrefslogtreecommitdiff
path: root/gtk/gtkeventcontrollerlegacy.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkeventcontrollerlegacy.c')
-rw-r--r--gtk/gtkeventcontrollerlegacy.c52
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