[orca] More work on filtering out useless canvas events



commit 0da9456523be2ce442727a668674dece2a93a59b
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Fri Feb 26 12:56:22 2016 -0500

    More work on filtering out useless canvas events

 src/orca/scripts/toolkits/gtk/script.py           |   14 +++++++++-----
 src/orca/scripts/toolkits/gtk/script_utilities.py |   18 ++++++++++++++++++
 2 files changed, 27 insertions(+), 5 deletions(-)
---
diff --git a/src/orca/scripts/toolkits/gtk/script.py b/src/orca/scripts/toolkits/gtk/script.py
index 4e92162..e7126e4 100644
--- a/src/orca/scripts/toolkits/gtk/script.py
+++ b/src/orca/scripts/toolkits/gtk/script.py
@@ -166,11 +166,9 @@ class Script(default.Script):
 
         # Unfiled. When a canvas item gets focus but is not selected, we
         # are only getting a focus event. This happens in Nautilus.
-        if role == pyatspi.ROLE_CANVAS:
-            topLevelObject = self.utilities.topLevelObject(event.source)
-            if topLevelObject == orca_state.activeWindow:
-                orca.setLocusOfFocus(event, event.source)
-                return
+        if role == pyatspi.ROLE_CANVAS and not self.utilities.eventIsCanvasNoise(event):
+            orca.setLocusOfFocus(event, event.source)
+            return
 
         # Unfiled, but yet another case of only getting a focus: event when
         # a widget appears in a parent container and is already focused.
@@ -231,3 +229,9 @@ class Script(default.Script):
             return
 
         default.Script.onTextSelectionChanged(self, event)
+
+    def isActivatableEvent(self, event):
+        if self.utilities.eventIsCanvasNoise(event):
+            return False
+
+        return super().isActivatableEvent(event)
diff --git a/src/orca/scripts/toolkits/gtk/script_utilities.py 
b/src/orca/scripts/toolkits/gtk/script_utilities.py
index e719b3c..aadd7dc 100644
--- a/src/orca/scripts/toolkits/gtk/script_utilities.py
+++ b/src/orca/scripts/toolkits/gtk/script_utilities.py
@@ -30,6 +30,7 @@ import re
 
 import orca.debug as debug
 import orca.script_utilities as script_utilities
+import orca.orca_state as orca_state
 
 class Utilities(script_utilities.Utilities):
 
@@ -106,3 +107,20 @@ class Utilities(script_utilities.Utilities):
             return False
 
         return rv
+
+    def eventIsCanvasNoise(self, event):
+        if event.source.getRole() != pyatspi.ROLE_CANVAS:
+            return False
+
+        if not orca_state.activeWindow:
+            msg = 'INFO: No active window'
+            debug.println(debug.LEVEL_INFO, msg, True)
+            return False
+
+        topLevel = self.topLevelObject(event.source)
+        if not self.isSameObject(topLevel, orca_state.activeWindow):
+            msg = 'INFO: Event is believed to be canvas noise'
+            debug.println(debug.LEVEL_INFO, msg, True)
+            return True
+
+        return False


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]