diff --git a/plugins/focuspoll/include/accessibilitywatcher/accessibilitywatcher.h b/plugins/focuspoll/include/accessibilitywatcher/accessibilitywatcher.h index 49449cad5fcd92c1eeb748bdcfb932dfee4b9630..4aeaa1e9a0a6846b383e255ee2b647d63ccf6400 100644 --- a/plugins/focuspoll/include/accessibilitywatcher/accessibilitywatcher.h +++ b/plugins/focuspoll/include/accessibilitywatcher/accessibilitywatcher.h @@ -55,6 +55,7 @@ class AccessibilityWatcher { int screenHeight; static bool ignoreLinks; std::deque focusList; + FocusInfo lastFocus; std::vector previouslyActiveMenus; std::vector> optimizedPaths; diff --git a/plugins/focuspoll/src/accessibilitywatcher.cpp b/plugins/focuspoll/src/accessibilitywatcher.cpp index 8a56b97f42ca06b2993c5de3eb20f6be46a5e8dd..f1c1bd8e7072d21c4fef29690b98181a393f725c 100644 --- a/plugins/focuspoll/src/accessibilitywatcher.cpp +++ b/plugins/focuspoll/src/accessibilitywatcher.cpp @@ -229,6 +229,7 @@ void AccessibilityWatcher::registerEvent (const AtspiEvent *event, const std::st AccessibilityWatcher::getInstance ()->focusList.erase (AccessibilityWatcher::getInstance ()->focusList.begin ()); } AccessibilityWatcher::getInstance ()->focusList.push_back (res); + AccessibilityWatcher::getInstance ()->lastFocus = res; } bool AccessibilityWatcher::appSpecificFilter (FocusInfo& focus, const AtspiEvent* event) @@ -247,10 +248,14 @@ bool AccessibilityWatcher::appSpecificFilter (FocusInfo& focus, const AtspiEvent focus.active = true; } - // Parasite event from mate-panel alt-F2 dialog. #494 + // Spam event from mate-panel alt-F2 dialog. bug hypra #494 if (focus.application == "mate-panel" && focus.role == "text" && focus.w > 250) { - return true; + auto lastFocus = AccessibilityWatcher::getInstance()->lastFocus; + if (lastFocus.application == "mate-panel" && lastFocus.role == "text" && lastFocus.w < 100) + { + return true; + } } if (focus.application == "soffice" && focus.role == "paragraph")