diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-03-22 18:32:19 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-07-16 15:43:43 +0200 |
commit | 7793aab5f00ab14a5dbd4a0305d93c95ebee0a11 (patch) | |
tree | d59946c057da9b20f6a6ad532b3a3e21db0eb4e7 | |
parent | ecf9fa65b8d864f4c815e229783e8d5fa2fccb93 (diff) | |
download | gtk+-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.c | 26 |
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 |