[gtk] main: Move visible focus handling
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk] main: Move visible focus handling
- Date: Fri, 21 Jun 2019 02:46:53 +0000 (UTC)
commit a7cdcdf92c7fefbb4732689c1e42ccff027af518
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Jun 21 01:57:51 2019 +0000
main: Move visible focus handling
No need to special-case this anymore; we can use
a regular event controller in GtkWindow for this.
gtk/gtkmain.c | 9 ---------
gtk/gtkwindow.c | 15 +++++++++++++++
2 files changed, 15 insertions(+), 9 deletions(-)
---
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index 362800ee6d..9eac06ffde 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -1998,15 +1998,6 @@ gtk_main_do_event (GdkEvent *event)
case GDK_KEY_PRESS:
case GDK_KEY_RELEASE:
- /* make focus visible in a window that receives a key event */
- {
- GtkRoot *root;
-
- root = gtk_widget_get_root (grab_widget);
- if (GTK_IS_WINDOW (root))
- gtk_window_set_focus_visible (GTK_WINDOW (root), TRUE);
- }
-
/* Catch alt press to enable auto-mnemonics;
* menus are handled elsewhere
* FIXME: this does not work with mnemonic modifiers other than Alt
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 25b6fc63a5..3b4b8b7bbe 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -406,6 +406,7 @@ static void gtk_window_size_allocate (GtkWidget *widget,
static gboolean gtk_window_close_request (GtkWindow *window);
static void gtk_window_focus_in (GtkWidget *widget);
static void gtk_window_focus_out (GtkWidget *widget);
+static gboolean gtk_window_key_press (GtkWidget *widget);
static void surface_state_changed (GtkWidget *widget);
static void surface_size_changed (GtkWidget *widget,
@@ -1864,10 +1865,14 @@ gtk_window_init (GtkWindow *window)
gtk_widget_add_controller (widget, motion_controller);
priv->key_controller = gtk_event_controller_key_new ();
+ gtk_event_controller_set_name (controller, "window focus");
+ gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
g_signal_connect_swapped (priv->key_controller, "focus-in",
G_CALLBACK (gtk_window_focus_in), window);
g_signal_connect_swapped (priv->key_controller, "focus-out",
G_CALLBACK (gtk_window_focus_out), window);
+ g_signal_connect_swapped (priv->key_controller, "key-pressed",
+ G_CALLBACK (gtk_window_key_press), window);
gtk_widget_add_controller (widget, priv->key_controller);
}
@@ -6207,6 +6212,16 @@ gtk_window_focus_out (GtkWidget *widget)
gtk_window_set_mnemonics_visible (window, FALSE);
}
+static gboolean
+gtk_window_key_press (GtkWidget *widget)
+{
+ GtkWindow *window = GTK_WINDOW (widget);
+
+ gtk_window_set_focus_visible (window, TRUE);
+
+ return FALSE;
+}
+
static GtkWindowPopover *
_gtk_window_has_popover (GtkWindow *window,
GtkWidget *widget)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]