[gtk/focus-ring-experiment] fine-tuning
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/focus-ring-experiment] fine-tuning
- Date: Thu, 23 Apr 2020 03:55:48 +0000 (UTC)
commit b2ac1e96df941547ef9b969d8c17474ca060da39
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Apr 22 23:52:20 2020 -0400
fine-tuning
Make it so that we only turn on visible focus in reponse to
a key press when focus moves between key press and release.
Additionally, make focus visible while Alt is pressed.
We still turn visible focus off after 5 seconds of no
keyboard interaction.
gtk/gtkwindow.c | 35 +++++++++++++++++++++++++++++++++--
1 file changed, 33 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 2f66ce4fd4..36196e14e7 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -200,6 +200,7 @@ typedef struct
GtkWidget *title_box;
GtkWidget *titlebar;
GtkWidget *popup_menu;
+ GtkWidget *key_press_focus;
GdkMonitor *initial_fullscreen_monitor;
guint edge_constraints;
@@ -5379,6 +5380,36 @@ update_mnemonics_visible (GtkWindow *window,
}
}
+static void
+update_focus_visible (GtkWindow *window,
+ guint keyval,
+ GdkModifierType state,
+ gboolean visible)
+{
+ GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
+
+ if (visible)
+ {
+ if (priv->focus_visible)
+ priv->key_press_focus = NULL;
+ else
+ priv->key_press_focus = priv->focus_widget;
+
+ if ((keyval == GDK_KEY_Alt_L || keyval == GDK_KEY_Alt_R) &&
+ ((state & (gtk_accelerator_get_default_mod_mask ()) & ~(GDK_ALT_MASK)) == 0))
+ gtk_window_set_focus_visible (window, TRUE);
+ }
+ else
+ {
+ if (priv->key_press_focus == priv->focus_widget)
+ gtk_window_set_focus_visible (window, FALSE);
+ else
+ gtk_window_set_focus_visible (window, TRUE);
+
+ priv->key_press_focus = NULL;
+ }
+}
+
static gboolean
gtk_window_key_pressed (GtkWidget *widget,
guint keyval,
@@ -5388,8 +5419,7 @@ gtk_window_key_pressed (GtkWidget *widget,
{
GtkWindow *window = GTK_WINDOW (widget);
- gtk_window_set_focus_visible (window, TRUE);
-
+ update_focus_visible (window, keyval, state, TRUE);
update_mnemonics_visible (window, keyval, state, TRUE);
return FALSE;
@@ -5404,6 +5434,7 @@ gtk_window_key_released (GtkWidget *widget,
{
GtkWindow *window = GTK_WINDOW (widget);
+ update_focus_visible (window, keyval, state, FALSE);
update_mnemonics_visible (window, keyval, state, FALSE);
return FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]