summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-03-22 18:32:19 +0100
committerCarlos Garnacho <carlosg@gnome.org>2018-07-16 15:43:43 +0200
commit7793aab5f00ab14a5dbd4a0305d93c95ebee0a11 (patch)
treed59946c057da9b20f6a6ad532b3a3e21db0eb4e7
parentecf9fa65b8d864f4c815e229783e8d5fa2fccb93 (diff)
downloadgtk+-7793aab5f00ab14a5dbd4a0305d93c95ebee0a11.tar.gz
gtkeventcontrollerkey: Add ::focus-in/out signals
And handle GDK_FOCUS_CHANGE events in order to emit those.
-rw-r--r--gtk/gtkeventcontrollerkey.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/gtk/gtkeventcontrollerkey.c b/gtk/gtkeventcontrollerkey.c
index 2afaf7f0be..70c34bd4e6 100644
--- a/gtk/gtkeventcontrollerkey.c
+++ b/gtk/gtkeventcontrollerkey.c
@@ -47,6 +47,8 @@ enum {
KEY_RELEASED,
MODIFIERS,
IM_UPDATE,
+ FOCUS_IN,
+ FOCUS_OUT,
N_SIGNALS
};
@@ -77,6 +79,16 @@ gtk_event_controller_key_handle_event (GtkEventController *controller,
guint16 keycode;
guint keyval;
+ if (event_type == GDK_FOCUS_CHANGE)
+ {
+ if (event->focus_change.in)
+ g_signal_emit (controller, signals[FOCUS_IN], 0);
+ else
+ g_signal_emit (controller, signals[FOCUS_OUT], 0);
+
+ return FALSE;
+ }
+
if (event_type != GDK_KEY_PRESS && event_type != GDK_KEY_RELEASE)
return FALSE;
@@ -167,6 +179,20 @@ gtk_event_controller_key_class_init (GtkEventControllerKeyClass *klass)
0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ signals[FOCUS_IN] =
+ g_signal_new (I_("focus-in"),
+ GTK_TYPE_EVENT_CONTROLLER_KEY,
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals[FOCUS_OUT] =
+ g_signal_new (I_("focus-out"),
+ GTK_TYPE_EVENT_CONTROLLER_KEY,
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
static void