def event_caret(vmID, accContext, hwnd):
    jabContext = JABContext(hwnd=hwnd, vmID=vmID, accContext=accContext)
    obj = jabContext
    # focus = api.getFocusObject()
    # if isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext:
    # 	obj = focus
    # else:
    # 	obj = NVDAObjects.JAB.JAB(jabContext=jabContext)
    # 	if not obj:
    # 		return
    eventHandler.queueEvent("caret", obj)
def event_descriptionChange(vmID, event, source, oldVal, newVal):
    jabContext = JABContext(vmID=vmID, accContext=source)
    focus = api.getFocusObject()
    if isinstance(focus,
                  NVDAObjects.JAB.JAB) and focus.jabContext == jabContext:
        obj = focus
    else:
        obj = NVDAObjects.JAB.JAB(jabContext=jabContext)
    if obj:
        eventHandler.queueEvent("descriptionChange", obj)
    bridgeDll.releaseJavaObject(vmID, event)
def event_valueChange(vmID, event, source, oldVal, newVal):
    jabContext = JABContext(vmID=vmID, accContext=source)
    focus = getFocusObject()
    obj = jabContext
    # if isinstance(focus, NVDAObjects.JAB.JAB) and focus.jabContext == jabContext:
    # 	obj = focus
    # else:
    # 	obj = NVDAObjects.JAB.JAB(jabContext=jabContext)
    if obj:
        pumpAll()
        eventHandler.queueEvent("valueChange", obj)
    bridgeDll.releaseJavaObject(vmID, event)
def event_gainFocus(vmID, accContext, hwnd):
    # print("FFFF")
    jabContext = JABContext(hwnd=hwnd, vmID=vmID, accContext=accContext)
    obj = jabContext
    # if not winUser.isDescendantWindow(winUser.getForegroundWindow(),jabContext.hwnd):
    # 	return
    # focus=eventHandler.lastQueuedFocusObject
    # if (isinstance(focus,NVDAObjects.JAB.JAB) and focus.jabContext==jabContext):
    # 	return
    # obj=NVDAObjects.JAB.JAB(jabContext=jabContext)
    # if obj.role==controlTypes.ROLE_UNKNOWN:
    # 	return
    eventHandler.queueEvent("gainFocus", obj)
def event_stateChange(vmID, accContext, oldState, newState):
    jabContext = JABContext(vmID=vmID, accContext=accContext)
    # focus=api.getFocusObject()
    #For broken tabs and menus, we need to watch for things being selected and pretend its a focus change
    # stateList=newState.split(',')
    # if "focused" in stateList or "selected" in stateList:
    # 	obj=NVDAObjects.JAB.JAB(jabContext=jabContext)
    # 	if not obj:
    # 		return
    # 	if focus!=obj and eventHandler.lastQueuedFocusObject!=obj and obj.role in (controlTypes.ROLE_MENUITEM,controlTypes.ROLE_TAB,controlTypes.ROLE_MENU):
    # 		eventHandler.queueEvent("gainFocus",obj)
    # 		return
    # if isinstance(focus,NVDAObjects.JAB.JAB) and focus.jabContext==jabContext:
    # 	obj=focus
    # else:
    # 	obj=NVDAObjects.JAB.JAB(jabContext=jabContext)
    # 	if not obj:
    # 		return
    obj = jabContext
    eventHandler.queueEvent("stateChange", obj)