From 066f3da4a1ea64962f2b748fd640907d08ff570c Mon Sep 17 00:00:00 2001 From: Leonhard Date: Thu, 13 Aug 2026 23:14:18 +0200 Subject: [PATCH] WindowSwitcher: Disable hover for a short time after key events --- .../WindowSwitcher/WindowSwitcher.vala | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Widgets/WindowSwitcher/WindowSwitcher.vala b/src/Widgets/WindowSwitcher/WindowSwitcher.vala index 28721ce8b..bcc61d5f6 100644 --- a/src/Widgets/WindowSwitcher/WindowSwitcher.vala +++ b/src/Widgets/WindowSwitcher/WindowSwitcher.vala @@ -16,6 +16,8 @@ public class Gala.WindowSwitcher : AbstractSwitcher, GestureTarget, RootTarget { private int modifier_mask; private Gala.ModalProxy? modal_proxy; private int previous_icon_index = 0; + private bool mouse_active = true; + private uint hover_timeout_id = 0; private WindowSwitcherIcon? _current_icon = null; private WindowSwitcherIcon? current_icon { @@ -138,6 +140,8 @@ public class Gala.WindowSwitcher : AbstractSwitcher, GestureTarget, RootTarget { open_switcher (); } + disable_hover (); + var binding_name = binding.get_name (); var backward = binding_name.has_suffix ("-backward"); @@ -223,7 +227,7 @@ public class Gala.WindowSwitcher : AbstractSwitcher, GestureTarget, RootTarget { icon.get_accessible ().accessible_parent = container.get_accessible (); icon.motion_event.connect ((_icon, event) => { - if (current_icon != _icon && !gesture_controller.recognizing) { + if (mouse_active && current_icon != _icon && !gesture_controller.recognizing) { select_icon ((WindowSwitcherIcon) _icon); } @@ -243,6 +247,8 @@ public class Gala.WindowSwitcher : AbstractSwitcher, GestureTarget, RootTarget { return; } + disable_hover (); + //Although we are setting visible via the opacity notify handler anyway //we have to set it here manually otherwise the size gotten via get_preferred_size is wrong visible = true; @@ -331,6 +337,8 @@ public class Gala.WindowSwitcher : AbstractSwitcher, GestureTarget, RootTarget { } public override bool key_press_event (Clutter.Event event) { + disable_hover (); + switch (event.get_key_symbol ()) { case Clutter.Key.Right: if (!gesture_controller.recognizing) { @@ -365,4 +373,17 @@ public class Gala.WindowSwitcher : AbstractSwitcher, GestureTarget, RootTarget { return modifiers & Clutter.ModifierType.MODIFIER_MASK; } + + private void disable_hover () { + mouse_active = false; + + if (hover_timeout_id != 0) { + Source.remove (hover_timeout_id); + } + + hover_timeout_id = Timeout.add_once (300, () => { + mouse_active = true; + hover_timeout_id = 0; + }); + } }