@@ -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
702699def 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
714713def 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
726727def 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
742745def 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
763767def internal_event_caretChange (vmID , event ,source ,oldPos ,newPos ):
@@ -770,14 +774,16 @@ def internal_event_caretChange(vmID, event,source,oldPos,newPos):
770774
771775def 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
782788def event_enterJavaWindow (hwnd ):
783789 internalQueueFunction (enterJavaWindow_helper ,hwnd )
0 commit comments