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)
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)