Skip to content

Commit 5dd5e92

Browse files
authored
Merge 2f252df into fb1ce94
2 parents fb1ce94 + 2f252df commit 5dd5e92

1 file changed

Lines changed: 50 additions & 44 deletions

File tree

source/JABHandler.py

Lines changed: 50 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -691,47 +691,50 @@ def internal_hasFocus(sourceContext):
691691
focus = api.getFocusObject()
692692
if isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == sourceContext:
693693
return True
694-
ancestors = api.getFocusAncestors()
695-
for ancestor in reversed(ancestors):
696-
if isinstance(ancestor, NVDAObjects.JAB.JAB) and ancestor.jabContext == sourceContext:
697-
return True
698-
return False
694+
ancestors = reversed(api.getFocusAncestors())
695+
return any((isinstance(x, NVDAObjects.JAB.JAB) and x.jabContext == sourceContext for x in ancestors))
699696

700697

701698
@AccessBridge_PropertyNameChangeFP
702699
def event_nameChange(vmID,event,source,oldVal,newVal):
703-
jabContext=JABContext(vmID=vmID,accContext=source)
704-
focus=api.getFocusObject()
705-
if isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext:
706-
obj = focus
700+
jabContext = JABContext(vmID=vmID, accContext=source)
701+
if jabContext.hwnd:
702+
focus = api.getFocusObject()
703+
obj = focus if (
704+
isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext
705+
) else NVDAObjects.JAB.JAB(jabContext=jabContext)
706+
if obj:
707+
eventHandler.queueEvent("nameChange", obj)
707708
else:
708-
obj = NVDAObjects.JAB.JAB(jabContext=jabContext)
709-
if obj:
710-
eventHandler.queueEvent("nameChange", obj)
709+
log.debugWarning("Unable to obtain window handle for accessible context")
711710
bridgeDll.releaseJavaObject(vmID,event)
712711

713712
@AccessBridge_PropertyDescriptionChangeFP
714713
def event_descriptionChange(vmID,event,source,oldVal,newVal):
715-
jabContext=JABContext(vmID=vmID,accContext=source)
716-
focus=api.getFocusObject()
717-
if isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext:
718-
obj = focus
714+
jabContext = JABContext(vmID=vmID, accContext=source)
715+
if jabContext.hwnd:
716+
focus = api.getFocusObject()
717+
obj = focus if (
718+
isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext
719+
) else NVDAObjects.JAB.JAB(jabContext=jabContext)
720+
if obj:
721+
eventHandler.queueEvent("descriptionChange", obj)
719722
else:
720-
obj = NVDAObjects.JAB.JAB(jabContext=jabContext)
721-
if obj:
722-
eventHandler.queueEvent("descriptionChange", obj)
723+
log.debugWarning("Unable to obtain window handle for accessible context")
723724
bridgeDll.releaseJavaObject(vmID,event)
724725

725726
@AccessBridge_PropertyValueChangeFP
726727
def event_valueChange(vmID,event,source,oldVal,newVal):
727-
jabContext=JABContext(vmID=vmID,accContext=source)
728-
focus=api.getFocusObject()
729-
if isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext:
730-
obj = focus
728+
jabContext = JABContext(vmID=vmID, accContext=source)
729+
if jabContext.hwnd:
730+
focus = api.getFocusObject()
731+
obj = focus if (
732+
isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext
733+
) else NVDAObjects.JAB.JAB(jabContext=jabContext)
734+
if obj:
735+
eventHandler.queueEvent("valueChange", obj)
731736
else:
732-
obj = NVDAObjects.JAB.JAB(jabContext=jabContext)
733-
if obj:
734-
eventHandler.queueEvent("valueChange", obj)
737+
log.debugWarning("Unable to obtain window handle for accessible context")
735738
bridgeDll.releaseJavaObject(vmID,event)
736739

737740
@AccessBridge_PropertyStateChangeFP
@@ -740,24 +743,25 @@ def internal_event_stateChange(vmID,event,source,oldState,newState):
740743
bridgeDll.releaseJavaObject(vmID,event)
741744

742745
def event_stateChange(vmID,accContext,oldState,newState):
743-
jabContext=JABContext(vmID=vmID,accContext=accContext)
744-
focus=api.getFocusObject()
746+
jabContext = JABContext(vmID=vmID, accContext=accContext)
747+
if not jabContext.hwnd:
748+
log.debugWarning("Unable to obtain window handle for accessible context")
749+
return
750+
focus = api.getFocusObject()
745751
#For broken tabs and menus, we need to watch for things being selected and pretend its a focus change
746-
stateList=newState.split(',')
752+
stateList = newState.split(',')
747753
if "focused" in stateList or "selected" in stateList:
748-
obj=NVDAObjects.JAB.JAB(jabContext=jabContext)
754+
obj = NVDAObjects.JAB.JAB(jabContext=jabContext)
749755
if not obj:
750756
return
751757
if focus!=obj and eventHandler.lastQueuedFocusObject!=obj and obj.role in (controlTypes.Role.MENUITEM,controlTypes.Role.TAB,controlTypes.Role.MENU):
752758
eventHandler.queueEvent("gainFocus",obj)
753759
return
754-
if isinstance(focus,NVDAObjects.JAB.JAB) and focus.jabContext==jabContext:
755-
obj=focus
756-
else:
757-
obj=NVDAObjects.JAB.JAB(jabContext=jabContext)
758-
if not obj:
759-
return
760-
eventHandler.queueEvent("stateChange",obj)
760+
obj = focus if (
761+
isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext
762+
) else NVDAObjects.JAB.JAB(jabContext=jabContext)
763+
if obj:
764+
eventHandler.queueEvent("stateChange", obj)
761765

762766
@AccessBridge_PropertyCaretChangeFP
763767
def internal_event_caretChange(vmID, event,source,oldPos,newPos):
@@ -770,14 +774,16 @@ def internal_event_caretChange(vmID, event,source,oldPos,newPos):
770774

771775
def event_caret(vmID, accContext, hwnd):
772776
jabContext = JABContext(hwnd=hwnd, vmID=vmID, accContext=accContext)
773-
focus = api.getFocusObject()
774-
if isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext:
775-
obj = focus
777+
if jabContext.hwnd:
778+
focus = api.getFocusObject()
779+
obj = focus if (
780+
isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext
781+
) else NVDAObjects.JAB.JAB(jabContext=jabContext)
782+
if obj:
783+
eventHandler.queueEvent("caret", obj)
776784
else:
777-
obj = NVDAObjects.JAB.JAB(jabContext=jabContext)
778-
if not obj:
779-
return
780-
eventHandler.queueEvent("caret", obj)
785+
log.debugWarning("Unable to obtain window handle for accessible context")
786+
781787

782788
def event_enterJavaWindow(hwnd):
783789
internalQueueFunction(enterJavaWindow_helper,hwnd)

0 commit comments

Comments
 (0)