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.