commit/wintenApps: 9 new changesets

  • From: commits-noreply@xxxxxxxxxxxxx
  • To: commits+int+220+6085746285340533186@xxxxxxxxxxxxxxxxxxxxx, nvda-addons-commits@xxxxxxxxxxxxx
  • Date: Fri, 28 Jul 2017 15:58:03 +0000 (UTC)

9 new commits in wintenApps:

https://bitbucket.org/nvdaaddonteam/wintenapps/commits/429cfc019a11/
Changeset:   429cfc019a11
Branch:      None
User:        josephsl
Date:        2017-07-12 07:34:18+00:00
Summary:     For the umpteenth time, switch to dev update channel

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs/w10config.py 
b/addon/globalPlugins/wintenObjs/w10config.py
index 241da88..dc8f0d3 100755
--- a/addon/globalPlugins/wintenObjs/w10config.py
+++ b/addon/globalPlugins/wintenObjs/w10config.py
@@ -30,9 +30,9 @@ addonHandler.initTranslation()
 # Add-on config database
 confspec = {
        "autoUpdateCheck": "boolean(default=true)",
-       "updateChannel": "string(default=stable)",
+       "updateChannel": "string(default=dev)",
        "updateCheckTime": "integer(default=0)",
-       "updateCheckTimeInterval": "integer(min=0, max=30, default=7)",
+       "updateCheckTimeInterval": "integer(min=0, max=30, default=1)",
 }
 config.conf.spec["wintenApps"] = confspec
 


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/f6ebfbdd552e/
Changeset:   f6ebfbdd552e
Branch:      None
User:        josephsl
Date:        2017-07-12 07:53:53+00:00
Summary:     Repeated toast announcements: incorporate UIA runtime ID and 
timestamp fix.

A better way is to check runtime ID and timestamp as implemented in NVDA Core. 
Because people are using master branch, check one of them is present in the 
toast object.

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs/__init__.py 
b/addon/globalPlugins/wintenObjs/__init__.py
index 61afe1a..dd480e8 100755
--- a/addon/globalPlugins/wintenObjs/__init__.py
+++ b/addon/globalPlugins/wintenObjs/__init__.py
@@ -329,12 +329,20 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                self.uiaDebugLogging(obj, "systemAlert")
                nextHandler()
 
-       toastMessage1703 = ""
+       _lastToastTimestamp = None
+       _lastToastRuntimeID = None
 
-       def event_UIA_window_windowOpen(self, obj, nextHandler):
+       def event_UIA_window_windowOpen(self):
                # Specifically in order to debug multiple toast announcements.
+               # The last toast consultant is incubating in NVDA 2017.3.
                self.uiaDebugLogging(obj, "windowOpen")
-               if isinstance(obj, Toast_win10) and obj.name == 
self.toastMessage1703:
-                       return
-               self.toastMessage1703 = obj.name
+               import sys
+               import time
+               if isinstance(obj, Toast_win10) and 
sys.getwindowsversion().build >= 15063 and not hasattr(obj, 
"_lastToastTimestamp"):
+                       toastTimestamp = time.time()
+                       toastRuntimeID = self.UIAElement.getRuntimeID()
+                       if toastRuntimeID == self._lastToastRuntimeID and 
toastTimestamp-self._lastToastTimestamp < 1.0:
+                               return
+                       self._lastToastTimestamp = toastTimestamp
+                       self._lastToastRuntimeID = toastRuntimeID
                nextHandler()


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/ce873073a2ce/
Changeset:   ce873073a2ce
Branch:      None
User:        josephsl
Date:        2017-07-12 07:57:31+00:00
Summary:     Typo fix

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs/__init__.py 
b/addon/globalPlugins/wintenObjs/__init__.py
index dd480e8..3f69009 100755
--- a/addon/globalPlugins/wintenObjs/__init__.py
+++ b/addon/globalPlugins/wintenObjs/__init__.py
@@ -332,7 +332,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
        _lastToastTimestamp = None
        _lastToastRuntimeID = None
 
-       def event_UIA_window_windowOpen(self):
+       def event_UIA_window_windowOpen(self, obj, nextHandler):
                # Specifically in order to debug multiple toast announcements.
                # The last toast consultant is incubating in NVDA 2017.3.
                self.uiaDebugLogging(obj, "windowOpen")
@@ -340,7 +340,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                import time
                if isinstance(obj, Toast_win10) and 
sys.getwindowsversion().build >= 15063 and not hasattr(obj, 
"_lastToastTimestamp"):
                        toastTimestamp = time.time()
-                       toastRuntimeID = self.UIAElement.getRuntimeID()
+                       toastRuntimeID = obj.UIAElement.getRuntimeID()
                        if toastRuntimeID == self._lastToastRuntimeID and 
toastTimestamp-self._lastToastTimestamp < 1.0:
                                return
                        self._lastToastTimestamp = toastTimestamp


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/87aa0305058d/
Changeset:   87aa0305058d
Branch:      None
User:        josephsl
Date:        2017-07-12 08:23:43+00:00
Summary:     Search field: manually say annonce new line is off.

Another response to NVDA Core: Start menu search field disables newline text 
announcement, so catch this and manually set this flag to false.

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs/__init__.py 
b/addon/globalPlugins/wintenObjs/__init__.py
index 3f69009..1277f3d 100755
--- a/addon/globalPlugins/wintenObjs/__init__.py
+++ b/addon/globalPlugins/wintenObjs/__init__.py
@@ -95,6 +95,9 @@ class UIAEditableTextWithSuggestions(UIA):
 # Core-based blueprint found in I6241 branch.
 class SearchField(UIAEditableTextWithSuggestions):
 
+       def initOverlayClass(self):
+               self.announceNewLineText = self.appModule.appName != "searchui"
+
        def event_suggestionsOpened(self):
                super(SearchField, self).event_suggestionsOpened()
                # Announce number of items found (except in Start search box 
where the suggestions are selected as user types).
@@ -124,6 +127,9 @@ class SearchField(UIAEditableTextWithSuggestions):
 try:
        class SearchFieldEx(CoreSearchField):
 
+               def initOverlayClass(self):
+                       self.announceNewLineText = self.appModule.appName != 
"searchui"
+
                def event_suggestionsOpened(self):
                        super(SearchFieldEx, self).event_suggestionsOpened()
                        # Announce number of items found (except in Start 
search box where the suggestions are selected as user types).


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/d7bd36336dc9/
Changeset:   d7bd36336dc9
Branch:      None
User:        josephsl
Date:        2017-07-13 19:13:24+00:00
Summary:     Calculaotr: don't do anything when live region changes.

Because both name change and live region change will be fired, just void live 
region change.

Affected #:  1 file

diff --git a/addon/appModules/calculator.py b/addon/appModules/calculator.py
index 75f078a..841855a 100755
--- a/addon/appModules/calculator.py
+++ b/addon/appModules/calculator.py
@@ -30,6 +30,19 @@ class AppModule(appModuleHandler.AppModule):
                        if obj.UIAElement.cachedAutomationID == 
"CalculatorResults":
                                clsList.insert(0, CalculatorResult)
 
+       def event_UIA_liveRegionChanged(self, obj, nextHandler):
+               # Unfortunately, the control that fires this has no automation 
ID yet says it is a generic te4xt block.
+               # This may mean anything can be announced, so try to filter 
them later.
+               if not self.shouldAnnounceResult:
+                       return
+               self.shouldAnnounceResult = False
+               nextHandler()
+
+       try:
+               event_liveRegionChange = event_UIA_liveRegionChanged
+       except:
+               pass
+
        def script_calculatorResult(self, gesture):
                gesture.send()
                # In redstone, calculator result keeps firing name change, so 
tell it to do so if and only if enter has been pressed.


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/d133544d409b/
Changeset:   d133544d409b
Branch:      None
User:        josephsl
Date:        2017-07-13 20:13:36+00:00
Summary:     Calculator: prevent double focus announcements in some cases, 
screen layout change.

In newer releases, calculator result is shown on the same spot on the object 
hierarchy, thus take a note of this. This necessarily means newest Calculator 
app release is supported.
When handling escape and enter keys, just look at automation ID. This allows 
controls other than radio buttons to be recognized when deaing with these 
commands, which allows display text to be announced no matter where one is at.

Affected #:  1 file

diff --git a/addon/appModules/calculator.py b/addon/appModules/calculator.py
index 841855a..0884cf6 100755
--- a/addon/appModules/calculator.py
+++ b/addon/appModules/calculator.py
@@ -32,11 +32,8 @@ class AppModule(appModuleHandler.AppModule):
 
        def event_UIA_liveRegionChanged(self, obj, nextHandler):
                # Unfortunately, the control that fires this has no automation 
ID yet says it is a generic te4xt block.
-               # This may mean anything can be announced, so try to filter 
them later.
-               if not self.shouldAnnounceResult:
-                       return
-               self.shouldAnnounceResult = False
-               nextHandler()
+               # This may mean anything can be announced, so try to filter 
them later. For now, forcefully disable.
+               return
 
        try:
                event_liveRegionChange = event_UIA_liveRegionChanged
@@ -44,21 +41,24 @@ class AppModule(appModuleHandler.AppModule):
                pass
 
        def script_calculatorResult(self, gesture):
+               # To prevent double focus announcement, check where we are.
+               focus = api.getFocusObject()
+               navMenu = False
+               if isinstance(focus, UIA) and isinstance(focus.parent.parent, 
UIA) and focus.parent.parent.UIAElement.cachedAutomationID == "FlyoutNav":
+                       navMenu = True
                gesture.send()
                # In redstone, calculator result keeps firing name change, so 
tell it to do so if and only if enter has been pressed.
                self.shouldAnnounceResult = True
                # Hack: only announce display text when an actual calculator 
button (usually equals button) is pressed.
-               focus = api.getFocusObject()
                # In redstone, pressing enter does not move focus to equals 
button.
                if isinstance(focus, CalculatorResult):
                        queueHandler.queueFunction(queueHandler.eventQueue, 
focus.reportFocus)
-               elif focus.role == controlTypes.ROLE_BUTTON and 
focus.UIAElement.cachedAutomationID != "NavButton":
-                       result = 
api.getForegroundObject().children[1].children[2]
-                       if result.UIAElement.cachedAutomationID != 
"CalculatorResults":
-                               # Programmer mode is active.
-                               result = result.simplePrevious
-                       if result.UIAElement.cachedAutomationID == 
"CalculatorResults":
-                               
queueHandler.queueFunction(queueHandler.eventQueue, result.setFocus)
+               elif focus.UIAElement.cachedAutomationID != "NavButton":
+                       # In newer releases, result is located on the same spot 
in the object hierarchy.
+                       result = 
api.getForegroundObject().children[1].children[3]
+                       if result.UIAElement.cachedAutomationID == 
"CalculatorResults" and not navMenu:
+                               # And no, do not allow focus to move.
+                               
queueHandler.queueFunction(queueHandler.eventQueue, result.reportFocus)
 
        __gestures={
                "kb:enter":"calculatorResult",


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/67e5e659213a/
Changeset:   67e5e659213a
Branch:      None
User:        josephsl
Date:        2017-07-16 21:25:10+00:00
Summary:     Calculator: implement foundations to announce live region changes 
in Calculator.

In Calculator, live region change is used to announce changes ti display and 
other elements. Be careful with this, as we don't want extraneous announcements.

Affected #:  1 file

diff --git a/addon/appModules/calculator.py b/addon/appModules/calculator.py
index 0884cf6..c632117 100755
--- a/addon/appModules/calculator.py
+++ b/addon/appModules/calculator.py
@@ -10,30 +10,38 @@ import winVersion
 import controlTypes
 from NVDAObjects.UIA import UIA
 import queueHandler
+import ui
 
-# Handle kwirks with calculation result.
-class CalculatorResult(UIA):
-
-       def event_nameChange(self):
-               if not self.appModule.shouldAnnounceResult:
-                       return
-               self.appModule.shouldAnnounceResult = False
+# Filter live region change elements to avoid repeated announcements.
+# A dedicated function is provded to react to future Calculator changes.
+def shouldLiveRegionChangeProceed(obj):
+       automationID = obj.UIAElement.cachedAutomationID
+       if automationID == "DateDiffAllUnitsResultLabel":
+               return True
+       elif automationID == "":
+               prevAutomationID = obj.previous.UIAElement.cachedAutomationID
+               if prevAutomationID == "negateButton":
+                       return False
+               elif prevAutomationID == "numberPad":
+                       return 
api.getForegroundObject().children[1].children[3].UIAElement.cachedAutomationID 
!= "CalculatorResults"
+       return False
 
 
 class AppModule(appModuleHandler.AppModule):
 
        shouldAnnounceResult = False
 
-       def chooseNVDAObjectOverlayClasses(self, obj, clsList):
-               if isinstance(obj, UIA):
-                       # To handle calculator result announcement.
-                       if obj.UIAElement.cachedAutomationID == 
"CalculatorResults":
-                               clsList.insert(0, CalculatorResult)
+       def event_nameChange(self, obj, nextHandler):
+               if not self.shouldAnnounceResult:
+                       return
+               self.shouldAnnounceResult = False
+               nextHandler()
 
        def event_UIA_liveRegionChanged(self, obj, nextHandler):
                # Unfortunately, the control that fires this has no automation 
ID yet says it is a generic te4xt block.
-               # This may mean anything can be announced, so try to filter 
them later. For now, forcefully disable.
-               return
+               # This may mean anything can be announced, so try to filter 
them.
+               if shouldLiveRegionChangeProceed(obj):
+                       nextHandler()
 
        try:
                event_liveRegionChange = event_UIA_liveRegionChanged
@@ -51,14 +59,15 @@ class AppModule(appModuleHandler.AppModule):
                self.shouldAnnounceResult = True
                # Hack: only announce display text when an actual calculator 
button (usually equals button) is pressed.
                # In redstone, pressing enter does not move focus to equals 
button.
-               if isinstance(focus, CalculatorResult):
-                       queueHandler.queueFunction(queueHandler.eventQueue, 
focus.reportFocus)
-               elif focus.UIAElement.cachedAutomationID != "NavButton":
-                       # In newer releases, result is located on the same spot 
in the object hierarchy.
-                       result = 
api.getForegroundObject().children[1].children[3]
-                       if result.UIAElement.cachedAutomationID == 
"CalculatorResults" and not navMenu:
-                               # And no, do not allow focus to move.
-                               
queueHandler.queueFunction(queueHandler.eventQueue, result.reportFocus)
+               if isinstance(focus, UIA):
+                       if focus.UIAElement.cachedAutomationID == 
"CalculatorResults":
+                               
queueHandler.queueFunction(queueHandler.eventQueue, focus.reportFocus)
+                       elif focus.UIAElement.cachedAutomationID != "NavButton":
+                               # In newer releases, result is located on the 
same spot in the object hierarchy.
+                               result = 
api.getForegroundObject().children[1].children[3]
+                               if result.UIAElement.cachedAutomationID == 
"CalculatorResults" and not navMenu:
+                                       # And no, do not allow focus to move.
+                                       
queueHandler.queueFunction(queueHandler.eventQueue, result.reportFocus)
 
        __gestures={
                "kb:enter":"calculatorResult",


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/9cf04924db21/
Changeset:   9cf04924db21
Branch:      None
User:        josephsl
Date:        2017-07-28 15:46:42+00:00
Summary:     Merge branch 'master' into stable

Affected #:  3 files

diff --git a/addon/appModules/calculator.py b/addon/appModules/calculator.py
index 75f078a..c632117 100755
--- a/addon/appModules/calculator.py
+++ b/addon/appModules/calculator.py
@@ -10,42 +10,64 @@ import winVersion
 import controlTypes
 from NVDAObjects.UIA import UIA
 import queueHandler
+import ui
 
-# Handle kwirks with calculation result.
-class CalculatorResult(UIA):
-
-       def event_nameChange(self):
-               if not self.appModule.shouldAnnounceResult:
-                       return
-               self.appModule.shouldAnnounceResult = False
+# Filter live region change elements to avoid repeated announcements.
+# A dedicated function is provded to react to future Calculator changes.
+def shouldLiveRegionChangeProceed(obj):
+       automationID = obj.UIAElement.cachedAutomationID
+       if automationID == "DateDiffAllUnitsResultLabel":
+               return True
+       elif automationID == "":
+               prevAutomationID = obj.previous.UIAElement.cachedAutomationID
+               if prevAutomationID == "negateButton":
+                       return False
+               elif prevAutomationID == "numberPad":
+                       return 
api.getForegroundObject().children[1].children[3].UIAElement.cachedAutomationID 
!= "CalculatorResults"
+       return False
 
 
 class AppModule(appModuleHandler.AppModule):
 
        shouldAnnounceResult = False
 
-       def chooseNVDAObjectOverlayClasses(self, obj, clsList):
-               if isinstance(obj, UIA):
-                       # To handle calculator result announcement.
-                       if obj.UIAElement.cachedAutomationID == 
"CalculatorResults":
-                               clsList.insert(0, CalculatorResult)
+       def event_nameChange(self, obj, nextHandler):
+               if not self.shouldAnnounceResult:
+                       return
+               self.shouldAnnounceResult = False
+               nextHandler()
+
+       def event_UIA_liveRegionChanged(self, obj, nextHandler):
+               # Unfortunately, the control that fires this has no automation 
ID yet says it is a generic te4xt block.
+               # This may mean anything can be announced, so try to filter 
them.
+               if shouldLiveRegionChangeProceed(obj):
+                       nextHandler()
+
+       try:
+               event_liveRegionChange = event_UIA_liveRegionChanged
+       except:
+               pass
 
        def script_calculatorResult(self, gesture):
+               # To prevent double focus announcement, check where we are.
+               focus = api.getFocusObject()
+               navMenu = False
+               if isinstance(focus, UIA) and isinstance(focus.parent.parent, 
UIA) and focus.parent.parent.UIAElement.cachedAutomationID == "FlyoutNav":
+                       navMenu = True
                gesture.send()
                # In redstone, calculator result keeps firing name change, so 
tell it to do so if and only if enter has been pressed.
                self.shouldAnnounceResult = True
                # Hack: only announce display text when an actual calculator 
button (usually equals button) is pressed.
-               focus = api.getFocusObject()
                # In redstone, pressing enter does not move focus to equals 
button.
-               if isinstance(focus, CalculatorResult):
-                       queueHandler.queueFunction(queueHandler.eventQueue, 
focus.reportFocus)
-               elif focus.role == controlTypes.ROLE_BUTTON and 
focus.UIAElement.cachedAutomationID != "NavButton":
-                       result = 
api.getForegroundObject().children[1].children[2]
-                       if result.UIAElement.cachedAutomationID != 
"CalculatorResults":
-                               # Programmer mode is active.
-                               result = result.simplePrevious
-                       if result.UIAElement.cachedAutomationID == 
"CalculatorResults":
-                               
queueHandler.queueFunction(queueHandler.eventQueue, result.setFocus)
+               if isinstance(focus, UIA):
+                       if focus.UIAElement.cachedAutomationID == 
"CalculatorResults":
+                               
queueHandler.queueFunction(queueHandler.eventQueue, focus.reportFocus)
+                       elif focus.UIAElement.cachedAutomationID != "NavButton":
+                               # In newer releases, result is located on the 
same spot in the object hierarchy.
+                               result = 
api.getForegroundObject().children[1].children[3]
+                               if result.UIAElement.cachedAutomationID == 
"CalculatorResults" and not navMenu:
+                                       # And no, do not allow focus to move.
+                                       
queueHandler.queueFunction(queueHandler.eventQueue, result.reportFocus)
 
        __gestures={
                "kb:enter":"calculatorResult",

diff --git a/addon/globalPlugins/wintenObjs/__init__.py 
b/addon/globalPlugins/wintenObjs/__init__.py
index 61afe1a..1277f3d 100755
--- a/addon/globalPlugins/wintenObjs/__init__.py
+++ b/addon/globalPlugins/wintenObjs/__init__.py
@@ -95,6 +95,9 @@ class UIAEditableTextWithSuggestions(UIA):
 # Core-based blueprint found in I6241 branch.
 class SearchField(UIAEditableTextWithSuggestions):
 
+       def initOverlayClass(self):
+               self.announceNewLineText = self.appModule.appName != "searchui"
+
        def event_suggestionsOpened(self):
                super(SearchField, self).event_suggestionsOpened()
                # Announce number of items found (except in Start search box 
where the suggestions are selected as user types).
@@ -124,6 +127,9 @@ class SearchField(UIAEditableTextWithSuggestions):
 try:
        class SearchFieldEx(CoreSearchField):
 
+               def initOverlayClass(self):
+                       self.announceNewLineText = self.appModule.appName != 
"searchui"
+
                def event_suggestionsOpened(self):
                        super(SearchFieldEx, self).event_suggestionsOpened()
                        # Announce number of items found (except in Start 
search box where the suggestions are selected as user types).
@@ -329,12 +335,20 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                self.uiaDebugLogging(obj, "systemAlert")
                nextHandler()
 
-       toastMessage1703 = ""
+       _lastToastTimestamp = None
+       _lastToastRuntimeID = None
 
        def event_UIA_window_windowOpen(self, obj, nextHandler):
                # Specifically in order to debug multiple toast announcements.
+               # The last toast consultant is incubating in NVDA 2017.3.
                self.uiaDebugLogging(obj, "windowOpen")
-               if isinstance(obj, Toast_win10) and obj.name == 
self.toastMessage1703:
-                       return
-               self.toastMessage1703 = obj.name
+               import sys
+               import time
+               if isinstance(obj, Toast_win10) and 
sys.getwindowsversion().build >= 15063 and not hasattr(obj, 
"_lastToastTimestamp"):
+                       toastTimestamp = time.time()
+                       toastRuntimeID = obj.UIAElement.getRuntimeID()
+                       if toastRuntimeID == self._lastToastRuntimeID and 
toastTimestamp-self._lastToastTimestamp < 1.0:
+                               return
+                       self._lastToastTimestamp = toastTimestamp
+                       self._lastToastRuntimeID = toastRuntimeID
                nextHandler()

diff --git a/addon/globalPlugins/wintenObjs/w10config.py 
b/addon/globalPlugins/wintenObjs/w10config.py
index 241da88..dc8f0d3 100755
--- a/addon/globalPlugins/wintenObjs/w10config.py
+++ b/addon/globalPlugins/wintenObjs/w10config.py
@@ -30,9 +30,9 @@ addonHandler.initTranslation()
 # Add-on config database
 confspec = {
        "autoUpdateCheck": "boolean(default=true)",
-       "updateChannel": "string(default=stable)",
+       "updateChannel": "string(default=dev)",
        "updateCheckTime": "integer(default=0)",
-       "updateCheckTimeInterval": "integer(min=0, max=30, default=7)",
+       "updateCheckTimeInterval": "integer(min=0, max=30, default=1)",
 }
 config.conf.spec["wintenApps"] = confspec
 


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/f828200e8168/
Changeset:   f828200e8168
Branch:      stable
User:        josephsl
Date:        2017-07-28 15:57:03+00:00
Summary:     WinTenApps 17.08 (Windows 10 second Anniversary)

Signed-off-by: Joseph Lee <joseph.lee22590@xxxxxxxxx>

Affected #:  2 files

diff --git a/buildVars.py b/buildVars.py
index 5fab602..7f6eade 100755
--- a/buildVars.py
+++ b/buildVars.py
@@ -19,7 +19,7 @@ addon_info = {
        # Translators: Long description to be shown for this add-on on add-on 
information from add-ons manager
        "addon_description" : _("""A collection of app modules for various 
Windows 10 apps"""),
        # version
-       "addon_version" : "17.07.1",
+       "addon_version" : "17.08",
        # Author(s)
        "addon_author" : u"Joseph Lee <joseph.lee22590@xxxxxxxxx>, Derek Riemer 
<driemer.riemer@xxxxxxxxx> and others",
        # URL for the add-on documentation support

diff --git a/readme.md b/readme.md
index 0b52c64..e4ce862 100755
--- a/readme.md
+++ b/readme.md
@@ -37,7 +37,7 @@ Note: this add-on requires Windows 10 Version 1607 (build 
14393) or later and NV
 * Added ability to check for add-on updates (automatic or manual) via the new 
Windows 10 App Essentials dialog found in NvDA Preferences menu. By default, 
stable and development versions will check for new updates automatically on a 
weekly or daily basis, respectively.
 * Ability to track events coming from Universal Windows Platform (UWP) apps if 
NVDA is run with debug logging enabled.
 * Initial support for floating Emoji input panel in build 16215 or later (for 
best experience when reading emojis, use Windows OneCore speech synthesizer).
-* In some apps, live region text is announced. This includes alerts in Edge 
and others. Note that this may result in double-speaking in some cases.
+* In some apps, live region text is announced. This includes alerts in Edge, 
results in Calculator and others. Note that this may result in double-speaking 
in some cases.
 * Toasts are no longer announced multiple times in Creators Update and later.
 
 ## Alarms and clock
@@ -47,6 +47,7 @@ Note: this add-on requires Windows 10 Version 1607 (build 
14393) or later and NV
 ## Calculator
 
 * When ENTER or Escape is pressed, NVDA announces calculation results.
+* For calculations such as unit converter and currency converter, NVDA will 
announce results as soon as calculations are entered.
 
 ## calendar

Repository URL: https://bitbucket.org/nvdaaddonteam/wintenapps/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.

Other related posts: