commit/wintenApps: 15 new changesets

  • From: commits-noreply@xxxxxxxxxxxxx
  • To: nvda-addons-commits@xxxxxxxxxxxxx
  • Date: Thu, 25 Aug 2016 07:09:41 -0000

15 new commits in wintenApps:

https://bitbucket.org/nvdaaddonteam/wintenapps/commits/6088ce155f49/
Changeset:   6088ce155f49
Branch:      None
User:        josephsl
Date:        2016-08-16 16:00:06+00:00
Summary:     Store: Never announce 'popup' for search prmopt.

UIA class name says it's a popup, but some are not really popups (for example, 
search field in Store app). Thus it might be advisable to grant exceptions for 
some popups.

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs.py 
b/addon/globalPlugins/wintenObjs.py
index d1b80c5..20996e8 100755
--- a/addon/globalPlugins/wintenObjs.py
+++ b/addon/globalPlugins/wintenObjs.py
@@ -47,7 +47,7 @@ class LoopingSelectorItem(UIA):
 letCortanaListen = False
 
 # We know the following elements are dialogs.
-wintenDialogs=("Shell_Dialog", "Credential Dialog Xaml Host", "Popup")
+wintenDialogs=("Shell_Dialog", "Popup")
 
 class GlobalPlugin(globalPluginHandler.GlobalPlugin):
 
@@ -70,7 +70,9 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                                clsList.append(LoopingSelectorItem)
                        # Windows that are really dialogs.
                        if obj.UIAElement.cachedClassName in wintenDialogs:
-                               clsList.insert(0, Dialog)
+                               # But some are not dialogs despite what UIA 
says (for example, search popup in Store).
+                               if obj.UIAElement.cachedAutomationID != 
"SearchPopUp":
+                                       clsList.insert(0, Dialog)
 
        # Focus announcement hacks.
        def event_gainFocus(self, obj, nextHandler):


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/e3a6e8809675/
Changeset:   e3a6e8809675
Branch:      None
User:        josephsl
Date:        2016-08-16 21:25:06+00:00
Summary:     Skype Preview: navigator object moves to a message when 
Control+NVDA+numrow keys are pressed.

Just like desktop client, move nav object to the message in question when 
Control+NVDA+number row keys are pressed. Unfortunately, because the message 
isn't announced, add a call to ui.message to announce the message as well.

Affected #:  1 file

diff --git a/addon/appModules/skypeapp.py b/addon/appModules/skypeapp.py
index 3dd6bca..5a7971d 100755
--- a/addon/appModules/skypeapp.py
+++ b/addon/appModules/skypeapp.py
@@ -41,6 +41,8 @@ class AppModule(appModuleHandler.AppModule):
                        if isinstance(element, UIA) and 
element.UIAElement.cachedAutomationID == "chatMessagesListView":
                                pos = int(gesture.displayName[-1])
                                if pos == 0: pos += 10
-                               ui.message(element.getChild(0-pos).name)
+                               message = element.getChild(0-pos)
+                               api.setNavigatorObject(message)
+                               ui.message(message.name)
                                return
                ui.message("Chat history not found")


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/88a3bf61efa2/
Changeset:   88a3bf61efa2
Branch:      None
User:        josephsl
Date:        2016-08-17 02:43:37+00:00
Summary:     Search suggestions: allow users to use up and down arrows to move 
between suggestions.

NVDA Core ticket 6241: arrow keys does force suggestion items to fire selection 
events. This comes at a cost: suggestion count will no longer be announced.

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs.py 
b/addon/globalPlugins/wintenObjs.py
index 20996e8..99964a6 100755
--- a/addon/globalPlugins/wintenObjs.py
+++ b/addon/globalPlugins/wintenObjs.py
@@ -49,6 +49,17 @@ letCortanaListen = False
 # We know the following elements are dialogs.
 wintenDialogs=("Shell_Dialog", "Popup")
 
+# General suggestions item handler
+# A testbed for NVDA Core ticket 6241.
+class SuggestionsListItem(UIA):
+
+       def event_UIA_elementSelected(self):
+               focusControllerFor=api.getFocusObject().controllerFor
+               if len(focusControllerFor)>0 and 
focusControllerFor[0].appModule is self.appModule and self.name:
+                       speech.cancelSpeech()
+                       api.setNavigatorObject(self)
+                       self.reportFocus()
+
 class GlobalPlugin(globalPluginHandler.GlobalPlugin):
 
        def __init__(self):
@@ -69,10 +80,13 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                        if obj.role==controlTypes.ROLE_LISTITEM and 
"LoopingSelectorItem" in obj.UIAElement.cachedClassName:
                                clsList.append(LoopingSelectorItem)
                        # Windows that are really dialogs.
-                       if obj.UIAElement.cachedClassName in wintenDialogs:
+                       elif obj.UIAElement.cachedClassName in wintenDialogs:
                                # But some are not dialogs despite what UIA 
says (for example, search popup in Store).
                                if obj.UIAElement.cachedAutomationID != 
"SearchPopUp":
                                        clsList.insert(0, Dialog)
+                       # Suggestions themselves.
+                       elif isinstance(obj.parent, UIA) and 
obj.parent.UIAElement.cachedAutomationID == "SuggestionsList":
+                               clsList.insert(0, SuggestionsListItem)
 
        # Focus announcement hacks.
        def event_gainFocus(self, obj, nextHandler):
@@ -84,24 +98,6 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                        api.setNavigatorObject(obj.simpleFirstChild)
                nextHandler()
 
-       # Needed to prevent double announcement...
-       valueCharCount = -1
-
-       def event_valueChange(self, obj, nextHandler):
-               # Announce at least suggestions count and the topmost one.
-               if isinstance(obj, UIA) and obj.UIAElement.cachedAutomationID 
== "TextBox" and obj.UIAElement.cachedClassName == "TextBox":
-                       if self.valueCharCount != len(obj.value):
-                               self.valueCharCount = len(obj.value)
-                               if len(obj.value) > 0:
-                                       try:
-                                               suggestions = 
api.getFocusObject().controllerFor
-                                               if len(suggestions) > 0:
-                                                       
ui.message("Suggestions: {count}".format(count = suggestions[0].childCount))
-                                                       
ui.message(suggestions[0].firstChild.name)
-                                       except AttributeError:
-                                               pass
-               nextHandler()
-
        def script_voiceActivation(self, gesture):
                gesture.send()
                if sys.getwindowsversion().major == 10:


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/0503c002e58c/
Changeset:   0503c002e58c
Branch:      None
User:        josephsl
Date:        2016-08-17 14:59:11+00:00
Summary:     Search fields: appearance of suggestions is now detected.

Use controller for event to detect appearance of suggestions list (NvDA Core 
ticket 6241). Specifically:
* Force UIA handler to detect controller for event.
* When suggestions appear, NVDA wiol say, 'suggestions'.

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs.py 
b/addon/globalPlugins/wintenObjs.py
index 99964a6..a0edc51 100755
--- a/addon/globalPlugins/wintenObjs.py
+++ b/addon/globalPlugins/wintenObjs.py
@@ -8,6 +8,7 @@ import sys
 import globalPluginHandler
 import appModuleHandler # Huge workaround.
 import controlTypes
+import UIAHandler
 import ui
 from NVDAObjects.UIA import UIA
 from NVDAObjects.behaviors import Dialog
@@ -49,6 +50,29 @@ letCortanaListen = False
 # We know the following elements are dialogs.
 wintenDialogs=("Shell_Dialog", "Popup")
 
+# Extra UIA constants
+UIA_ControllerForPropertyId = 30104
+
+# Search fields.
+# Some of them raise controller for event, an event fired if another UI 
element depends on this control.
+class SearchField(UIA):
+
+       def event_UIA_controllerFor(self):
+               # Only useful if suggestions appear and disappear.
+               focus = api.getFocusObject()
+               focusControllerFor = focus.controllerFor
+               if len(focusControllerFor)>0:
+                       ui.message("suggestions")
+               else:
+                       # Manually locate live region until NVDA Core 
implements this.
+                       obj = focus
+                       while obj is not None:
+                               if isinstance(obj, UIA) and 
obj.UIAElement.cachedClassName == "Popup":
+                                       ui.message(obj.description)
+                                       return
+                               obj = obj.next
+                       ui.message("suggestions closed")
+
 # General suggestions item handler
 # A testbed for NVDA Core ticket 6241.
 class SuggestionsListItem(UIA):
@@ -72,6 +96,11 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                        self.bindGesture("kb:windows+shift+c", 
"voiceActivation")
                else:
                        self.bindGesture("kb:windows+c", "voiceActivation")
+               # Listen for controller for events (to be removed once NVDA 
Core itself supports this).
+               if UIA_ControllerForPropertyId not in 
UIAHandler.UIAPropertyIdsToNVDAEventNames:
+                       
UIAHandler.UIAPropertyIdsToNVDAEventNames[UIA_ControllerForPropertyId] = 
"UIA_controllerFor"
+                       # Unfortunately, UIA handler must be restarted in order 
for changes to take effect (ugly hack, but it's a must until a plug-in model is 
developed).
+                       UIAHandler.initialize()
 
        def chooseNVDAObjectOverlayClasses(self, obj, clsList):
                # NVDA Core ticket 5231: Announce values in time pickers.
@@ -84,6 +113,9 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                                # But some are not dialogs despite what UIA 
says (for example, search popup in Store).
                                if obj.UIAElement.cachedAutomationID != 
"SearchPopUp":
                                        clsList.insert(0, Dialog)
+                       # Search field that does raise controller for event.
+                       elif obj.UIAElement.cachedClassName == "TextBox" and 
obj.UIAElement.cachedAutomationID in ("TextBox", "SearchTextBox"):
+                               clsList.insert(0, SearchField)
                        # Suggestions themselves.
                        elif isinstance(obj.parent, UIA) and 
obj.parent.UIAElement.cachedAutomationID == "SuggestionsList":
                                clsList.insert(0, SuggestionsListItem)


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/58f88c46c9d8/
Changeset:   58f88c46c9d8
Branch:      None
User:        josephsl
Date:        2016-08-17 15:19:47+00:00
Summary:     UIA handler: make sure to terminate it before restarting, 
otherwise UIA handler thread won't die.

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs.py 
b/addon/globalPlugins/wintenObjs.py
index a0edc51..4a1ebe7 100755
--- a/addon/globalPlugins/wintenObjs.py
+++ b/addon/globalPlugins/wintenObjs.py
@@ -100,6 +100,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                if UIA_ControllerForPropertyId not in 
UIAHandler.UIAPropertyIdsToNVDAEventNames:
                        
UIAHandler.UIAPropertyIdsToNVDAEventNames[UIA_ControllerForPropertyId] = 
"UIA_controllerFor"
                        # Unfortunately, UIA handler must be restarted in order 
for changes to take effect (ugly hack, but it's a must until a plug-in model is 
developed).
+                       UIAHandler.terminate()
                        UIAHandler.initialize()
 
        def chooseNVDAObjectOverlayClasses(self, obj, clsList):


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/04e861765aed/
Changeset:   04e861765aed
Branch:      None
User:        josephsl
Date:        2016-08-18 15:55:31+00:00
Summary:     WinTenObjs: oops, make sure suggestions is a list item.

Without chekcing for role of suggestions, it'll continue to recurse between 
child and parent. This problem was observed as recursion error in Twitter app.

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs.py 
b/addon/globalPlugins/wintenObjs.py
index 4a1ebe7..b72f7e4 100755
--- a/addon/globalPlugins/wintenObjs.py
+++ b/addon/globalPlugins/wintenObjs.py
@@ -118,7 +118,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
                        elif obj.UIAElement.cachedClassName == "TextBox" and 
obj.UIAElement.cachedAutomationID in ("TextBox", "SearchTextBox"):
                                clsList.insert(0, SearchField)
                        # Suggestions themselves.
-                       elif isinstance(obj.parent, UIA) and 
obj.parent.UIAElement.cachedAutomationID == "SuggestionsList":
+                       elif obj.role == controlTypes.ROLE_LISTITEM and 
isinstance(obj.parent, UIA) and obj.parent.UIAElement.cachedAutomationID == 
"SuggestionsList":
                                clsList.insert(0, SuggestionsListItem)
 
        # Focus announcement hacks.


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/20405d3fa807/
Changeset:   20405d3fa807
Branch:      None
User:        josephsl
Date:        2016-08-18 17:58:43+00:00
Summary:     Skype Preview: just like Skype for Desktop, make messages less 
verbose via regular expressions.

Affected #:  1 file

diff --git a/addon/appModules/skypeapp.py b/addon/appModules/skypeapp.py
index 5a7971d..ba44b85 100755
--- a/addon/appModules/skypeapp.py
+++ b/addon/appModules/skypeapp.py
@@ -4,6 +4,7 @@
 
 # Workarounds for Skype UWP, providing similar features to Skype for Desktop 
client support (skype.py found in NVDA Core).
 
+import re
 import appModuleHandler
 import ui
 from NVDAObjects.UIA import UIA
@@ -16,6 +17,16 @@ class AppModule(appModuleHandler.AppModule):
                for pos in xrange(10):
                        self.bindGesture("kb:control+nvda+%s"%pos, 
"readMessage")
 
+       # Borrowed from Skype for Desktop app module (NVDA Core).
+       RE_MESSAGE = re.compile(r"^From (?P<from>.*), (?P<body>.*), sent on 
(?P<time>.*?)(?: Edited by .* at .*?)?(?: Not delivered|New)?$")
+
+       def reportMessage(self, message):
+               # Just like Desktop client, messages are quite verbose.
+               m = self.RE_MESSAGE.match(message)
+               if m:
+                       text = "%s, %s" % (m.group("from"), m.group("body"))
+               ui.message(text)
+
        def event_nameChange(self, obj, nextHandler):
                if isinstance(obj, UIA):
                        uiElement = obj.UIAElement
@@ -25,7 +36,7 @@ class AppModule(appModuleHandler.AppModule):
                                if nextElement.cachedClassName == "RichEditBox" 
and nextElement.cachedAutomationID == "ChatEditBox":
                                        ui.message(obj.name if obj.name != "" 
else "Typing stopped")
                        elif uiElement.cachedAutomationID == "Message" and 
uiElement.cachedClassName == "ListViewItem":
-                               ui.message(obj.name)
+                               self.reportMessage(obj.name)
                nextHandler()
 
        def script_readMessage(self, gesture):
@@ -43,6 +54,6 @@ class AppModule(appModuleHandler.AppModule):
                                if pos == 0: pos += 10
                                message = element.getChild(0-pos)
                                api.setNavigatorObject(message)
-                               ui.message(message.name)
+                               self.reportMessage(message.name)
                                return
                ui.message("Chat history not found")


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/a254cc0858ee/
Changeset:   a254cc0858ee
Branch:      None
User:        josephsl
Date:        2016-08-19 18:00:48+00:00
Summary:     Skype Preview: NVDA will not play error tones when moving to a 
different conversation and in other places.

Once a varaible is assigned, keep it that way, otherwise assignment error is 
thrown.

Affected #:  1 file

diff --git a/addon/appModules/skypeapp.py b/addon/appModules/skypeapp.py
index ba44b85..f27b8be 100755
--- a/addon/appModules/skypeapp.py
+++ b/addon/appModules/skypeapp.py
@@ -24,8 +24,8 @@ class AppModule(appModuleHandler.AppModule):
                # Just like Desktop client, messages are quite verbose.
                m = self.RE_MESSAGE.match(message)
                if m:
-                       text = "%s, %s" % (m.group("from"), m.group("body"))
-               ui.message(text)
+                       message = "%s, %s" % (m.group("from"), m.group("body"))
+               ui.message(message)
 
        def event_nameChange(self, obj, nextHandler):
                if isinstance(obj, UIA):


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/70d54fca692b/
Changeset:   70d54fca692b
Branch:      None
User:        derekriemer
Date:        2016-08-22 05:40:39+00:00
Summary:     weather app, rather than list items, the tabs report as such.

Affected #:  1 file

diff --git a/addon/appModules/microsoft_msn_weather.py 
b/addon/appModules/microsoft_msn_weather.py
new file mode 100644
index 0000000..d91670f
--- /dev/null
+++ b/addon/appModules/microsoft_msn_weather.py
@@ -0,0 +1,21 @@
+# WinTenApps/microsoft_msn_weather.py
+# Part of Windows 10 App Essentials collection
+# Copyright 2016 Derek Riemer, released under GPL.
+
+# Provides workarounds for the weather app.
+
+
+import appModuleHandler
+import controlTypes
+import re
+
+#Regexp for deciding whether this ID should be a tab control
+RE_TAB_AUTOMATION_MATCH = re.compile(r"L1NavigationButton_\d+")
+
+class AppModule(appModuleHandler.AppModule):
+       def event_NVDAObject_init(self, obj):
+               if obj.UIAElement.CachedAutomationId == u"SideNavigationBar" 
and not obj.role in (controlTypes.ROLE_GROUPING, ):
+                       obj.role = controlTypes.ROLE_TABCONTROL
+               theId = obj.UIAElement.CachedAutomationId
+               if RE_TAB_AUTOMATION_MATCH.match(theId):
+                       obj.role = controlTypes.ROLE_TAB
\ No newline at end of file


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/f89528cfa6a9/
Changeset:   f89528cfa6a9
Branch:      None
User:        josephsl
Date:        2016-08-22 06:16:11+00:00
Summary:     Weather: tabs such as 'forecast' and 'maps' are recognized as tabs 
(patch by Derek Riemer)

weather app, rather than list items, the tabs report as such.
Affected #:  1 file

diff --git a/addon/appModules/microsoft_msn_weather.py 
b/addon/appModules/microsoft_msn_weather.py
new file mode 100644
index 0000000..d91670f
--- /dev/null
+++ b/addon/appModules/microsoft_msn_weather.py
@@ -0,0 +1,21 @@
+# WinTenApps/microsoft_msn_weather.py
+# Part of Windows 10 App Essentials collection
+# Copyright 2016 Derek Riemer, released under GPL.
+
+# Provides workarounds for the weather app.
+
+
+import appModuleHandler
+import controlTypes
+import re
+
+#Regexp for deciding whether this ID should be a tab control
+RE_TAB_AUTOMATION_MATCH = re.compile(r"L1NavigationButton_\d+")
+
+class AppModule(appModuleHandler.AppModule):
+       def event_NVDAObject_init(self, obj):
+               if obj.UIAElement.CachedAutomationId == u"SideNavigationBar" 
and not obj.role in (controlTypes.ROLE_GROUPING, ):
+                       obj.role = controlTypes.ROLE_TABCONTROL
+               theId = obj.UIAElement.CachedAutomationId
+               if RE_TAB_AUTOMATION_MATCH.match(theId):
+                       obj.role = controlTypes.ROLE_TAB
\ No newline at end of file


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/6eb891a3dee8/
Changeset:   6eb891a3dee8
Branch:      None
User:        josephsl
Date:        2016-08-22 06:22:25+00:00
Summary:     Readme and authors: add Derek Riemer as author, add Weather entry

Affected #:  2 files

diff --git a/buildVars.py b/buildVars.py
index 3d8b609..1e6737d 100755
--- a/buildVars.py
+++ b/buildVars.py
@@ -21,7 +21,7 @@ addon_info = {
        # version
        "addon_version" : "16.08.1",
        # Author(s)
-       "addon_author" : u"Joseph Lee <joseph.lee22590@xxxxxxxxx> and others",
+       "addon_author" : u"Joseph Lee <joseph.lee22590@xxxxxxxxx>, Derek Riemer 
<driemer.riemer@xxxxxxxxx> and others",
        # URL for the add-on documentation support
        "addon_url" : "http://addons.nvda-project.org/";,
        # Documentation file name

diff --git a/readme.md b/readme.md
index 7d78828..fd6ab9a 100755
--- a/readme.md
+++ b/readme.md
@@ -1,6 +1,6 @@
 # Windows 10 App Essentials
 
-* Author: Joseph Lee
+* Authors: Joseph Lee, Derek Riemer and other Windows 10 users
 * Download [stable version][1]
 * Download [development version][2]
 
@@ -18,6 +18,7 @@ The following app modules or support modules for some apps 
are included (see eac
 * Skype Preview
 * Twitter.
 * TeamViewer Touch.
+* Weather.
 * Miscellaneous modules for controls such as Start Menu tiles.
 
 ## General
@@ -64,6 +65,10 @@ The following app modules or support modules for some apps 
are included (see eac
 
 * Button labels are now announced.
 
+## Weather
+
+* Tabs such as "forecast" and "maps" are recognized as proper tabs (patch by 
Derek Riemer).
+
 [1]: http://addons.nvda-project.org/files/get.php?file=w10
 
 [2]: http://addons.nvda-project.org/files/get.php?file=w10-dev


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/a9f4e42403a3/
Changeset:   a9f4e42403a3
Branch:      None
User:        derekriemer
Date:        2016-08-22 19:31:41+00:00
Summary:     Weather: various fixes.

* Settings is a button.
* Feedback is a tab.
* Added .gitignore from the template.

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

Affected #:  3 files

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4aff587
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,11 @@
+addon/doc/*.css
+addon/doc/en/
+addon/globalPlugins/tips.json
+*_docHandler.py
+*.html
+*.ini
+*.mo
+*.pot
+*.pyc
+*.nvda-addon
+.sconsign.dblite

diff --git a/addon/appModules/microsoft_msn_weather.py 
b/addon/appModules/microsoft_msn_weather.py
index d91670f..54f9aec 100644
--- a/addon/appModules/microsoft_msn_weather.py
+++ b/addon/appModules/microsoft_msn_weather.py
@@ -4,18 +4,70 @@
 
 # Provides workarounds for the weather app.
 
-
-import appModuleHandler
-import controlTypes
 import re
+import controlTypes
+import appModuleHandler
+import ui
+import wx
+from NVDAObjects import NVDAObject
 
 #Regexp for deciding whether this ID should be a tab control
-RE_TAB_AUTOMATION_MATCH = re.compile(r"L1NavigationButton_\d+")
+RE_TAB_AUTOMATION_MATCH = re.compile("|".join([
+       r"L1NavigationButton_\d+",
+       r"L1NavigationButton_Feedback",
+]))
+#Regexp for deciding if this should be a button
+RE_BUTTONCONTROL = re.compile("|".join([
+       r"L1NavigationButton_Settings",
+]))
+#Regexp for multiLine List items, whos children need the list class added.
+#This is because the AutomationID for them is non existant, so we check their 
parent.
+RE_PARENT_LISTS = re.compile("|".join([
+       r"DailyList",
+       r"HourlyList",
+]))
+
+class WeatherForecastItem(NVDAObject):
+       def initOverlayClass(self):
+               self.curLine = -1 #Start out reading the first thing.
+               self.lines = self.name.split("\r\n")
+       
+       def script_nextLine(self, gesture):
+               if self.curLine < len(self.lines)-1:
+                       self.curLine += 1
+                       ui.message(self.lines[self.curLine])
+               else:
+                       ui.message(_("No more weather data for this item."))
+                       wx.Bell()
+       
+       def script_previousLine(self, gesture):
+               if self.curLine > 0:
+                       self.curLine -=1
+                       ui.message(self.lines[self.curLine])
+               else:
+                       ui.message(_("No more weather data for this item."))
+                       wx.Bell()
+
+       
+       __gestures = {
+               "kb:downarrow" : "nextLine",
+               "kb:uparrow" : "previousLine",
+       }
 
 class AppModule(appModuleHandler.AppModule):
+
+       def chooseNVDAObjectOverlayClasses(self, obj, clsList):
+               if obj.role == controlTypes.ROLE_LISTITEM and 
RE_PARENT_LISTS.match(obj.parent.UIAElement.CachedAutomationID):
+                       clsList.insert(0, WeatherForecastItem)
+
        def event_NVDAObject_init(self, obj):
+               try:
+                       theId = obj.UIAElement.CachedAutomationId
+               except AttributeError:
+                       return
                if obj.UIAElement.CachedAutomationId == u"SideNavigationBar" 
and not obj.role in (controlTypes.ROLE_GROUPING, ):
                        obj.role = controlTypes.ROLE_TABCONTROL
-               theId = obj.UIAElement.CachedAutomationId
                if RE_TAB_AUTOMATION_MATCH.match(theId):
-                       obj.role = controlTypes.ROLE_TAB
\ No newline at end of file
+                       obj.role = controlTypes.ROLE_TAB
+               elif RE_BUTTONCONTROL.match(theId):
+                       obj.role = controlTypes.ROLE_BUTTON

diff --git a/readme.md b/readme.md
index fd6ab9a..a263b7d 100755
--- a/readme.md
+++ b/readme.md
@@ -68,6 +68,7 @@ The following app modules or support modules for some apps 
are included (see eac
 ## Weather
 
 * Tabs such as "forecast" and "maps" are recognized as proper tabs (patch by 
Derek Riemer).
+* when reading a forecast, use the left and right arrows to move between 
items. Use the up and down arrows to read the individual items. For example, 
pressing the right arrow might report "Monday: 79 degrees, partly cloudy, ..." 
pressing the down arrow will say "Monday" Then pressing it again will read the 
next item (Like the temperature). This currently works for daily and hourly 
forecasts.
 
 [1]: http://addons.nvda-project.org/files/get.php?file=w10
 


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/132eff2eb8f8/
Changeset:   132eff2eb8f8
Branch:      None
User:        josephsl
Date:        2016-08-25 01:04:07+00:00
Summary:     AppModuleHandler workaround: implement suggestion from NVDA Core 
ticket 5323 workaround.

It's better to replace it right away then going through conditionals (noted by 
Jamie Teh from NV Access), hence this add-on also takes advantage of this 
shortcut.

Affected #:  1 file

diff --git a/addon/globalPlugins/wintenObjs.py 
b/addon/globalPlugins/wintenObjs.py
index b72f7e4..ea29689 100755
--- a/addon/globalPlugins/wintenObjs.py
+++ b/addon/globalPlugins/wintenObjs.py
@@ -26,10 +26,8 @@ def getAppModuleFromProcessID(processID):
        with appModuleHandler._getAppModuleLock:
                mod=appModuleHandler.runningTable.get(processID)
                if not mod:
-                       
appName=appModuleHandler.getAppNameFromProcessID(processID)
                        # #5323: Certain executables contain dots as part of 
its file name.
-                       if "." in appName:
-                               appName = appName.replace(".","_")
+                       
appName=appModuleHandler.getAppNameFromProcessID(processID).replace(".","_")
                        mod=appModuleHandler.fetchAppModule(processID,appName)
                        if not mod:
                                raise RuntimeError("error fetching default 
appModule")


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/83a78269520a/
Changeset:   83a78269520a
Branch:      None
User:        josephsl
Date:        2016-08-25 06:51:37+00:00
Summary:     Merge branch 'stable'

Affected #:  8 files

diff --git a/addon/doc/bg/readme.md b/addon/doc/bg/readme.md
index f1f45ee..9d9e92d 100644
--- a/addon/doc/bg/readme.md
+++ b/addon/doc/bg/readme.md
@@ -77,8 +77,11 @@
   съобщават двукратно.
 
 ## Предварителна версия на Skype (Skype Preview)
+
 * Текстът на индикатора за писане бива съобщаван, както това става в Skype
   за работен плот.
+* Частично завръщане на клавишните комбинации от Control+NVDA+цифрите от
+  цифровия ред за прочитане на последните 10 съобщения в дискусията.
 
 ## Bank of America/Twitter
 

diff --git a/addon/doc/de/readme.md b/addon/doc/de/readme.md
index a99e9a9..9a692f0 100644
--- a/addon/doc/de/readme.md
+++ b/addon/doc/de/readme.md
@@ -70,7 +70,10 @@ welche inbegriffen sind):
 * Progress bar values and other information are no longer announced twice.
 
 ## Skype Preview
+
 * Typing indicator text is announced just like Skype for Desktop client.
+* Partial return of Control+NvDA+number row commands to read recent chat
+  history.
 
 ## Bank of America/Twitter
 

diff --git a/addon/doc/es/readme.md b/addon/doc/es/readme.md
index 454632f..0df2c88 100644
--- a/addon/doc/es/readme.md
+++ b/addon/doc/es/readme.md
@@ -74,8 +74,11 @@ qué se incluye):
   dos veces.
 
 ## Previsualización de Skype
+
 * Al teclear el indicador de texto se anuncia sólo como cliente Skype para
   Escritorio.
+* Partial return of Control+NvDA+number row commands to read recent chat
+  history.
 
 ## Bank of America/Twitter
 

diff --git a/addon/doc/fi/readme.md b/addon/doc/fi/readme.md
index 6922ccc..1567018 100644
--- a/addon/doc/fi/readme.md
+++ b/addon/doc/fi/readme.md
@@ -71,7 +71,10 @@ käytettävissä olevista ominaisuuksista kunkin sovelluksen 
kappaleesta):
 * Edistymispalkkien arvoja tai muita tietoja ei lueta enää kahdesti.
 
 ## Skypen esiversio
+
 * Kirjoitusilmaisimen teksti puhutaan kuten Skypen työpöytäversiossa.
+* Osittainen Control+NVDA+numero-komentojen paluu tuoreen
+  keskusteluhistorian lukemiseen.
 
 ## Bank of America/Twitter
 

diff --git a/addon/doc/fr/readme.md b/addon/doc/fr/readme.md
index e5040c2..1b34a7f 100644
--- a/addon/doc/fr/readme.md
+++ b/addon/doc/fr/readme.md
@@ -75,8 +75,11 @@ est inclus) :
   plus annoncés deux fois.
 
 ## Skype Preview
+
 * L'indicateur de frappe de texte est annoncé exactement comme pour le Skype
   for Desktop client.
+* Retour partiel de Contrôle+NVDA+commandes numéro de ligne pour lire
+  l'historique de conversation récente.
 
 ## Bank of America/Twitter
 

diff --git a/addon/doc/gl/readme.md b/addon/doc/gl/readme.md
index 7ab0be6..779407f 100644
--- a/addon/doc/gl/readme.md
+++ b/addon/doc/gl/readme.md
@@ -71,8 +71,11 @@ se inclúe):
   dúas veces.
 
 ## Previsualización de Skype
+
 * Ao teclear o indicador de texto anúnciase só coma cliente Skype para
   Escritorio.
+* Partial return of Control+NvDA+number row commands to read recent chat
+  history.
 
 ## Bank of America/Twitter
 

diff --git a/addon/doc/it/readme.md b/addon/doc/it/readme.md
index 6ca2303..347cbf6 100644
--- a/addon/doc/it/readme.md
+++ b/addon/doc/it/readme.md
@@ -71,8 +71,11 @@ si veda la relativa sezione per ulteriori informazioni:
   volte.
 
 ## Anteprima Skype
+
 * Viene annunciato quando un utente sta scrivendo, così come accade in Skype
   per desktop.
+* Partial return of Control+NvDA+number row commands to read recent chat
+  history.
 
 ## Bank of America/Twitter
 

diff --git a/addon/doc/ru/readme.md b/addon/doc/ru/readme.md
index eaac9c0..b0d0007 100644
--- a/addon/doc/ru/readme.md
+++ b/addon/doc/ru/readme.md
@@ -67,7 +67,10 @@ Windows 10, а также исправлений для некоторых ти
 * Progress bar values and other information are no longer announced twice.
 
 ## Skype Preview
+
 * Typing indicator text is announced just like Skype for Desktop client.
+* Partial return of Control+NvDA+number row commands to read recent chat
+  history.
 
 ## Bank of America/Twitter
 


https://bitbucket.org/nvdaaddonteam/wintenapps/commits/418df9551d7c/
Changeset:   418df9551d7c
Branch:      master
User:        josephsl
Date:        2016-08-25 07:02:13+00:00
Summary:     SConstruct: If build var change is detected, manifest will be 
modified (fix from Jamie Teh from Nv Access)

Affected #:  1 file

diff --git a/sconstruct b/sconstruct
index b77cfe6..c28510b 100755
--- a/sconstruct
+++ b/sconstruct
@@ -167,6 +167,8 @@ env.Depends(mergePot, i18nFiles)
 
 # Generate Manifest path
 manifest = env.NVDAManifest(os.path.join("addon", "manifest.ini"), 
os.path.join("manifest.ini.tpl"))
+# Ensure manifest is rebuilt if buildVars is updated.
+env.Depends(manifest, "buildVars.py")
 
 env.Depends(addon, manifest)
 env.Default(addon)

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: