[orca/gnome-3-12] Add support for non-modal GtkPopover



commit 25c997b0c4d97dd87640aaa4f5b7aa6ecbc4fbbf
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue Mar 11 08:15:14 2014 -0400

    Add support for non-modal GtkPopover

 src/orca/scripts/toolkits/gtk/script.py           |   14 ++++++++++++++
 src/orca/scripts/toolkits/gtk/script_utilities.py |   16 ++++++++++++++++
 2 files changed, 30 insertions(+), 0 deletions(-)
---
diff --git a/src/orca/scripts/toolkits/gtk/script.py b/src/orca/scripts/toolkits/gtk/script.py
index 58feb19..0854391 100644
--- a/src/orca/scripts/toolkits/gtk/script.py
+++ b/src/orca/scripts/toolkits/gtk/script.py
@@ -125,6 +125,20 @@ class Script(default.Script):
             orca.setLocusOfFocus(event, obj)
             return
 
+    def onShowingChanged(self, event):
+        """Callback for object:state-changed:showing accessibility events."""
+
+        obj = event.source
+        if not self.utilities._isNonModalPopOver(obj):
+            default.Script.onShowingChanged(self, event)
+            return
+
+        if event.detail1:
+            speech.speak(self.speechGenerator.generateSpeech(obj))
+            labels = self.utilities.unrelatedLabels(obj)
+            msg = ' '.join(map(self.utilities.displayedText, labels))
+            self.presentMessage(msg)
+
     def onTextSelectionChanged(self, event):
         """Callback for object:text-selection-changed accessibility events."""
 
diff --git a/src/orca/scripts/toolkits/gtk/script_utilities.py 
b/src/orca/scripts/toolkits/gtk/script_utilities.py
index cb38144..9af0b8b 100644
--- a/src/orca/scripts/toolkits/gtk/script_utilities.py
+++ b/src/orca/scripts/toolkits/gtk/script_utilities.py
@@ -67,3 +67,19 @@ class Utilities(script_utilities.Utilities):
             return True
 
         return False
+
+    def _isNonModalPopOver(self, obj):
+        try:
+            state = obj.getState()
+        except:
+            return False
+
+        if obj.getState().contains(pyatspi.STATE_MODAL):
+            return False
+
+        relations = obj.getRelationSet()
+        for relation in relations:
+            if relation.getRelationType() == pyatspi.RELATION_POPUP_FOR:
+                return True
+
+        return False


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