core/window: Propagate focus appearance to all ancestors
The loop in meta_window_propagate_focus_appearance breaks if any ancestor has attached_focus_window == focus_window but further ancestors might still have a different attached_focus_window. Continue the loop until the root ancestor instead. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2913 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3356>
This commit is contained in:
parent
6f6f16c2b1
commit
4e088cac0e
@ -5232,19 +5232,15 @@ meta_window_propagate_focus_appearance (MetaWindow *window,
|
||||
parent = meta_window_get_transient_for (child);
|
||||
while (parent && (!focused || should_propagate_focus_appearance (child)))
|
||||
{
|
||||
gboolean child_focus_state_changed;
|
||||
gboolean child_focus_state_changed = FALSE;
|
||||
|
||||
if (focused)
|
||||
if (focused && parent->attached_focus_window != focus_window)
|
||||
{
|
||||
if (parent->attached_focus_window == focus_window)
|
||||
break;
|
||||
child_focus_state_changed = (parent->attached_focus_window == NULL);
|
||||
parent->attached_focus_window = focus_window;
|
||||
}
|
||||
else
|
||||
else if (parent->attached_focus_window == focus_window)
|
||||
{
|
||||
if (parent->attached_focus_window != focus_window)
|
||||
break;
|
||||
child_focus_state_changed = (parent->attached_focus_window != NULL);
|
||||
parent->attached_focus_window = NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user