>From 5236743da897491a7b5d9f91fc7a6c1a0816c69c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Vilmar=20Est=C3=A1cio=20de=20Souza?= Date: Sat, 23 Nov 2013 07:27:45 -0200 Subject: [PATCH] Fix menu presentation in java swing apps --- src/orca/scripts/toolkits/J2SE-access-bridge/script.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/orca/scripts/toolkits/J2SE-access-bridge/script.py b/src/orca/scripts/toolkits/J2SE-access-bridge/script.py index a9e6d6e..ad4c595 100644 --- a/src/orca/scripts/toolkits/J2SE-access-bridge/script.py +++ b/src/orca/scripts/toolkits/J2SE-access-bridge/script.py @@ -173,9 +173,23 @@ class Script(default.Script): obj = event.source if not (event.detail1 and obj.getRole() == pyatspi.ROLE_ROOT_PANE): + # we need to check if there is a menu or a menu item + if obj.getState().contains(pyatspi.STATE_ARMED)\ + or obj.getRole() == pyatspi.ROLE_MENU: + orca.setLocusOfFocus(event, obj) + return default.Script.onFocusedChanged(self, event) return + # we need to check if there is a menu present and show it. + for child in obj: + if child.getRole() == pyatspi.ROLE_LAYERED_PANE: + popup = self.utilities.descendantsWithRole( + child, pyatspi.ROLE_MENU, False) + if len(popup) > 0: + orca.setLocusOfFocus(event, popup[0]) + return + # This is a workaround for a java-access-bridge bug (Bug 355011) # where popup menu events are not sent to Orca. # -- 1.8.4.2