diff --git a/source/NVDAObjects/UIA/__init__.py b/source/NVDAObjects/UIA/__init__.py index f4479ca8429..41f095999c8 100644 --- a/source/NVDAObjects/UIA/__init__.py +++ b/source/NVDAObjects/UIA/__init__.py @@ -993,6 +993,10 @@ def _get_UIATextEditPattern(self): self.UIATextEditPattern=self._getUIAPattern(UIAHandler.UIA_TextEditPatternId,UIAHandler.IUIAutomationTextEditPattern,cache=False) return self.UIATextEditPattern + def _get_UIAWindowPattern(self): + self.UIAWindowPattern=self._getUIAPattern(UIAHandler.UIA_WindowPatternId,UIAHandler.IUIAutomationWindowPattern) + return self.UIAWindowPattern + def _get_UIALegacyIAccessiblePattern(self): self.UIALegacyIAccessiblePattern=self._getUIAPattern(UIAHandler.UIA_LegacyIAccessiblePatternId,UIAHandler.IUIAutomationLegacyIAccessiblePattern) return self.UIALegacyIAccessiblePattern diff --git a/source/NVDAObjects/UIA/winConsoleUIA.py b/source/NVDAObjects/UIA/winConsoleUIA.py index cae4c4f8417..d59d890cd06 100644 --- a/source/NVDAObjects/UIA/winConsoleUIA.py +++ b/source/NVDAObjects/UIA/winConsoleUIA.py @@ -6,6 +6,7 @@ import config import ctypes +import globalVars import NVDAHelper import speech import time @@ -112,7 +113,7 @@ def move(self, unit, direction, endPoint=None): self._rangeObj.CompareEndPoints( UIAHandler.TextPatternRangeEndpoint_Start, firstVisiRange, UIAHandler.TextPatternRangeEndpoint_Start) < 0 - or self._rangeObj.CompareEndPoints( + or not self.obj.maximized and self._rangeObj.CompareEndPoints( UIAHandler.TextPatternRangeEndpoint_Start, lastVisiRange, UIAHandler.TextPatternRangeEndpoint_End) >= 0): self._rangeObj = oldRange @@ -290,8 +291,28 @@ def script_flush_queuedChars(self, gesture): self._queuedChars = [] speech.curWordChars = [] + def _get_maximized(self): + res = self.UIAElement.getRuntimeId() in globalVars.maximizedUIAConsoles + if ( + self.parent.UIAWindowPattern.CurrentWindowVisualState + == UIAHandler.WindowVisualState_Maximized + and not res + ): + globalVars.maximizedUIAConsoles.append(self.UIAElement.getRuntimeId()) + return True + return res + def _getTextLines(self): # Filter out extraneous empty lines from UIA + # Since GetVisibleRanges seems to be broken for at least Win10 1903 + # we can only do this if the window isn't maximized. + if self.maximized: + return ( + self.makeTextInfo(textInfos.POSITION_ALL) + ._rangeObj.getText(-1) + .strip() + .split("\r\n") + ) ptr = self.UIATextPattern.GetVisibleRanges() res = [ptr.GetElement(i).GetText(-1) for i in range(ptr.length)] return res diff --git a/source/globalVars.py b/source/globalVars.py index 5a93fec7ba6..f439488dd8f 100644 --- a/source/globalVars.py +++ b/source/globalVars.py @@ -18,6 +18,7 @@ @type navigatorObject: L{NVDAObjects.NVDAObject} @var navigatorTracksFocus: if true, the navigator object will follow the focus as it changes @type navigatorTracksFocus: boolean +@var maximizedUIAConsoles: stores state for maximized consoles, see #9899 """ startTime=0 @@ -38,3 +39,4 @@ settingsRing = None speechDictionaryProcessing=True exitCode=0 +maximizedUIAConsoles = []