summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-11-05 13:07:35 +0000
committerCaolán McNamara <caolanm@redhat.com>2021-11-05 13:50:48 +0000
commit155b791d4369578de147a7833f3c155194ef1907 (patch)
tree963dcf0ffa74be53460cb3b8c348f4b101e166b4
parent9c1a41052b71d685903ad664ada7937d7a514376 (diff)
downloadgtk+-155b791d4369578de147a7833f3c155194ef1907.tar.gz
update focus indicators in popovers
https://gitlab.gnome.org/GNOME/gtk/-/issues/4383
-rw-r--r--gtk/gtkpopover.c6
-rw-r--r--gtk/gtkwindow.c14
-rw-r--r--gtk/gtkwindowprivate.h5
3 files changed, 18 insertions, 7 deletions
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 244fedcd7a..2ef0500171 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -776,6 +776,7 @@ gtk_popover_key_pressed (GtkWidget *widget,
GdkModifierType state)
{
GtkPopover *popover = GTK_POPOVER (widget);
+ GtkWindow *root;
if (keyval == GDK_KEY_Escape)
{
@@ -783,6 +784,8 @@ gtk_popover_key_pressed (GtkWidget *widget,
return TRUE;
}
+ root = GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (popover)));
+ _gtk_window_update_focus_visible (root, keyval, state, TRUE);
update_mnemonics_visible (popover, keyval, state, TRUE);
return FALSE;
@@ -795,7 +798,10 @@ gtk_popover_key_released (GtkWidget *widget,
GdkModifierType state)
{
GtkPopover *popover = GTK_POPOVER (widget);
+ GtkWindow *root;
+ root = GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (popover)));
+ _gtk_window_update_focus_visible (root, keyval, state, FALSE);
update_mnemonics_visible (popover, keyval, state, FALSE);
return FALSE;
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 6ae7cef9fb..999d0f58d4 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -4815,11 +4815,11 @@ update_mnemonics_visible (GtkWindow *window,
}
}
-static void
-update_focus_visible (GtkWindow *window,
- guint keyval,
- GdkModifierType state,
- gboolean visible)
+void
+_gtk_window_update_focus_visible (GtkWindow *window,
+ guint keyval,
+ GdkModifierType state,
+ gboolean visible)
{
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
@@ -4854,7 +4854,7 @@ gtk_window_key_pressed (GtkWidget *widget,
{
GtkWindow *window = GTK_WINDOW (widget);
- update_focus_visible (window, keyval, state, TRUE);
+ _gtk_window_update_focus_visible (window, keyval, state, TRUE);
update_mnemonics_visible (window, keyval, state, TRUE);
return FALSE;
@@ -4869,7 +4869,7 @@ gtk_window_key_released (GtkWidget *widget,
{
GtkWindow *window = GTK_WINDOW (widget);
- update_focus_visible (window, keyval, state, FALSE);
+ _gtk_window_update_focus_visible (window, keyval, state, FALSE);
update_mnemonics_visible (window, keyval, state, FALSE);
return FALSE;
diff --git a/gtk/gtkwindowprivate.h b/gtk/gtkwindowprivate.h
index a9546272ec..27b824690c 100644
--- a/gtk/gtkwindowprivate.h
+++ b/gtk/gtkwindowprivate.h
@@ -47,6 +47,11 @@ gboolean _gtk_window_group_widget_is_blocked_for_device (GtkWindowGroup *
void _gtk_window_unset_focus_and_default (GtkWindow *window,
GtkWidget *widget);
+void _gtk_window_update_focus_visible (GtkWindow *window,
+ guint keyval,
+ GdkModifierType state,
+ gboolean visible);
+
void _gtk_window_set_allocation (GtkWindow *window,
int width,
int height,