def handleInputCompositionStart(compositionString, selectionStart,
                                selectionEnd, isReading):
    import speech
    from NVDAObjects.inputComposition import InputComposition
    from NVDAObjects.behaviors import CandidateItem
    focus = api.getFocusObject()
    if focus.parent and isinstance(focus.parent, InputComposition):
        #Candidates infront of existing composition string
        announce = not config.conf["inputComposition"][
            "announceSelectedCandidate"]
        focus.parent.compositionUpdate(compositionString,
                                       selectionStart,
                                       selectionEnd,
                                       isReading,
                                       announce=announce)
        return 0
    #IME keeps updating input composition while the candidate list is open
    #Therefore ignore new composition updates if candidate selections are configured for speaking.
    if config.conf["inputComposition"][
            "announceSelectedCandidate"] and isinstance(focus, CandidateItem):
        return 0
    if not isinstance(focus, InputComposition):
        parent = api.getDesktopObject().objectWithFocus()
        # #5640: Although we want to use the most correct focus (I.e. OS, not NVDA), if they are the same, we definitely want to use the original instance, so that state such as auto selection is maintained.
        if parent == focus:
            parent = focus
        curInputComposition = InputComposition(parent=parent)
        oldSpeechMode = speech.speechMode
        speech.speechMode = speech.speechMode_off
        eventHandler.executeEvent("gainFocus", curInputComposition)
        focus = curInputComposition
        speech.speechMode = oldSpeechMode
    focus.compositionUpdate(compositionString, selectionStart, selectionEnd,
                            isReading)
Beispiel #2
0
def handleInputCompositionStart(compositionString, selectionStart,
                                selectionEnd, isReading):
    import speech
    from NVDAObjects.inputComposition import InputComposition
    from NVDAObjects.behaviors import CandidateItem
    focus = api.getFocusObject()
    if focus.parent and isinstance(focus.parent, InputComposition):
        #Candidates infront of existing composition string
        announce = not config.conf["inputComposition"][
            "announceSelectedCandidate"]
        focus.parent.compositionUpdate(compositionString,
                                       selectionStart,
                                       selectionEnd,
                                       isReading,
                                       announce=announce)
        return 0
    #IME keeps updating input composition while the candidate list is open
    #Therefore ignore new composition updates if candidate selections are configured for speaking.
    if config.conf["inputComposition"][
            "announceSelectedCandidate"] and isinstance(focus, CandidateItem):
        return 0
    if not isinstance(focus, InputComposition):
        parent = api.getDesktopObject().objectWithFocus()
        curInputComposition = InputComposition(parent=parent)
        oldSpeechMode = speech.speechMode
        speech.speechMode = speech.speechMode_off
        eventHandler.executeEvent("gainFocus", curInputComposition)
        focus = curInputComposition
        speech.speechMode = oldSpeechMode
    focus.compositionUpdate(compositionString, selectionStart, selectionEnd,
                            isReading)