Skip to content
Permalink
Branch: master
Commits on Oct 10, 2019
  1. Modern keyboard: add support for 20H1 Text Input Host. Re #10359. (#1…

    josephsl authored and michaelDCurran committed Oct 10, 2019
    …0362)
    
    In build 18963, modern keyboard executable has been renamed to textinputhost.exe, breaking support for emoji panel, clipboard history and other modern input features. Thus add an alias app module.
Commits on Oct 9, 2019
  1. Start menu suggestions: announce result details (#10340)

    josephsl authored and michaelDCurran committed Oct 9, 2019
    * SearchUI app module: update copyright headers, indentation, add introductory docstring.
    
    * SearchUI: recognize search results in recent Windows 10 feature updates with redesigned Windows Search. Re #10329.
    
    In 2019, Windows Search has been redesigned. Although the new UI appeared in Version 1903 (May 2019 Update), it was made available to older Windows 10 releases with a server-side update. Compared to old UI, suggestions are grouped by categories - instead of all results grouped under a single list, results list is now populated with search categories, with each category in turn hosting a list of results. This latter control isn't recognized as suggestions list, leading to NVDA not announcing item detalis as it used to.
    Therefore recognize the new UI and recognize actual results so NVDA can announce result details. This results in repetitions, which will be corrected with a accompanying work dealing with search field caret event changes.
    
    * Lint: whitespace
    
    * UIA.findOverlayClasses: add a comment on 2019 Windows Search results due to UI redesign.
    
    Commented by Leonard de Ruijter (Babbage): because not all suggestions list items are not part of results list (some are inside another item such as results from Windows Search in 2019 due to UI changes), document this fact for clarity.
  2. Windows Search: renamed from searchui to searchapp in build 18965. Re #…

    josephsl authored and michaelDCurran committed Oct 9, 2019
    …10350. (#10351)
    
    Several Windows Search features will not work in Windows 10 build 18965 and later becasue executable has been renamed from searchui to searchapp. Therefore add an alias app module for SearchApp.exe that imports everything from searchui app module.
Commits on Sep 13, 2019
  1. NVDAObjects/UIA/search field: EdgeHTML Edge's address omnibar is no l…

    josephsl authored and michaelDCurran committed Sep 13, 2019
    …onger a search field. Re #10002. (#10200)
    
    Thanks to UIA auto-select for eit fields, it is no longer necessary to treat Edge's address omnibar as a dedicated search field, in that search results will be announced automatically. This also resolves an issue where NVDA kept playing search suggestion sound when Edge was maximized due to odd controller for event being fired by omnibar itself.
Commits on Sep 10, 2019
  1. App modules/product name and version: use kernel32::GetPackageFullNam…

    josephsl authored and michaelDCurran committed Sep 10, 2019
    …e to obtain product info for immersive (hosted) apps (#10114)
    
    * App modules/product name and version: obtain product info for immersive (hosted) apps via kernel32::GetPackageFullName function. Re #10108.
    
    On Windows 8 and later, some apps can run inside a container. This is the case for WinRT/UWP apps, some web apps, and converted desktop apps (such as Microsoft Office 365 downloaded from Microsoft Store). For these apps, kernel32.dll::GetPackageFullName returns the 'real' product info such as name and version. Because it'll be returned in a serialized string representation, parse the first two values (name and version).
    To accomodate this change, the former method of obtaining product name and version via file version info has been moved to an internal function inside product info setter method. This function will be invoked if:
    * This is Windows 7/Server 2008 R2 (no support for containers yet).
    * An immersive app that is really a native pap (such as File Explorer).
    * Converted desktop apps that will not expose version info via file version info structure (such as Notepad in 20H1 Preview build 18963 and later).
    For consistency with immersive app info structure, the modified function will return a 2-tuple that records product name and version in that order.
    
    * App module handler/product name and version: _executableFileInfo -> _getExecutableFileInfo. Re #10108.
    
    Reviewed by Mick Curran (NV Access): because of what the internal function does, it is better to give it a more descriptive name than just 'executable file info'.
    
    * App module handler/product name and version for immersive apps: typo fix.
    
    * Product name and version: separate executable file info function to its own method in base pap module. Re #10108.
    
    Suggested by Leonard de Ruijter (Babbage): transform executable file info function from an internal one to a private method in base app module for ease of future maintenance.
Commits on Aug 5, 2019
  1. Update changes file for PR's from threshold branch (PR #9942)

    josephsl authored and feerrenrut committed Aug 5, 2019
    Fixes #9862
Commits on Aug 1, 2019
  1. Revert search history (PR #9993)

    josephsl authored and feerrenrut committed Aug 1, 2019
    Revert "History in search dialog (PR #8921)"
    
    Although useful, search history combo box does not allow languages requiring IME (input method editor) to cancel entry of search text. This affects Chinese, Japanese, Korean and other languages.
    
    This reverts commit e3b2e79.
    
    Keep the "Searching for text section" in the user guide as most of the section
    is accurate and there are links to this section in other parts of the document.
    
    Only remove lines that refer to search history.
Commits on Jul 26, 2019
  1. NVDAObjects/UIA: recognize UWP tooltips (PR #8124)

    josephsl authored and feerrenrut committed Jul 26, 2019
    Fixes #8118
    
    Tooltips from universal apps are powered by XAML and has a specific class name (for now). This allows us to recognize them as proper tool tips.
  2. (re)set NVDA version to 2019.3 (PR #9975)

    josephsl authored and feerrenrut committed Jul 26, 2019
Commits on Jul 15, 2019
  1. Python 3: Check for None during check for previous installation versi…

    josephsl authored and feerrenrut committed Jul 15, 2019
    …on in Installer GUI (PR #9924)
    
    Comparison function found in installer can return an integer (-1, 0, 1) or None. Because of this, when comparing the return value from installer GUI, it assumed None was an integer when in fact in Python 3, it is a different type.
    
    Fixes #9923
Commits on Jul 12, 2019
  1. Python 3: Use built-in "input" instread of "raw_input" (PR #9908)

    josephsl authored and feerrenrut committed Jul 12, 2019
    NVDA slave module was using the raw_input function to scrape stdin, which raises NameError in Python 3.
    In Python 3 raw_input has been replaced with the functional equal input. For more information see:
    https://www.python.org/dev/peps/pep-3111/
Commits on Jul 11, 2019
  1. Python 3: MoveFileEx - catch WindowsError instead of WinError (PR #9876)

    josephsl authored and feerrenrut committed Jul 11, 2019
    Fixes an issue in #9847: catch WindowsError because WinError is not an exception type.
Commits on Jul 9, 2019
  1. Python 3: use UTF-8 decoding for font name with Scintilla controls (PR

    josephsl authored and feerrenrut committed Jul 9, 2019
    …#9893)
    
    Fixes #9892
    
    Format info command fails in Notepad++ and other Scintilla controls because font name is a bytes-like object.
    Font name is decoded using UTF-8.
Commits on Jul 5, 2019
  1. WinKernel: create a wrapper for MoveFileExW function and associated f…

    josephsl authored and feerrenrut committed Jul 5, 2019
    …lag constants (PR #9849)
    
    Fixes #9847
    Fixes #9825
    
    Add a wrapper for kernel32.dll::MoveFileExW function, along with flag constants. This then allows any module/function/class to use this wrapper instead of defining their own. Re: #9847
    
    Update check: use winKernel.moveFileEx instead of os.renames after postponing an update. Re #9825.
    Python 3.7's `os.renames` function no longer allows copies across disk drives, it raises `OSError` with ERROR_NOT_SAME_DEVICE. 
    The extended description of this error is "The system cannot move the file to a different disk drive". 
    This can cause an error when updating a portable copy of NVDA"
    See https://bugs.python.org/issue28356 for information about the change to os.rename / os.renames
Commits on Jun 28, 2019
  1. Update check/Python 3: update check resource is encoded as bytes, thu…

    josephsl authored and michaelDCurran committed Jun 28, 2019
    …s make it Unicode. Re #9819. (#9837)
    
    Update check resource is encoded as bytes, causing a type error to be thrown if trying to make a key:val out of it. Thus convert this into Unicode before splitting into key:val.
Commits on Jun 26, 2019
  1. Python 3/urllib: imports, timeout (#9820)

    josephsl authored and michaelDCurran committed Jun 26, 2019
    * Urllib/Python 3: import urllib.request and urllib.parse, not just urllib. Re #9818.
    
    If one imports urllib in Python 3, only the bare bone package will be imported - no parsing, no errors, no opener, etc. Thus import both urllib.request and urllib.parse 9although just importing urllib.request will then load other parts of this package, imported both in update check module for sake of completeness).
    
    * Urllib/Python 3: urllib.urlencode -> urllib.parse.urlencode. Re #9818.
    
    * Urllib/Python 3: urllib.urlopen -> urllib.request.urlopen for ones without timeout. Re #9818.
    
    * Urllib/Python 3: urllib.urlopen -> urllib.request.urlopen for certificates. Re #9818.
    
    * Urllib/Python 3: urllib.urlopen -> urlib.request.urlopen with timeout. Re #9818.
    
    In Python 3, timeout is specified as part of urllib.request.urlopen function. Therefore move the code around and the accompanying comment for #2352.
Commits on Jun 25, 2019
  1. Add-on handler: ugettext -> gettext (#9810)

    josephsl authored and michaelDCurran committed Jun 25, 2019
  2. App module handler/does app mod exists: return false when called befo…

    josephsl authored and michaelDCurran committed Jun 25, 2019
    …re imports are initialized (#9800)
    
    * App module handler/does app mod exists: catch attribute error and assume there is no app module for desktop object if invokved from system tests in Python 3. Re #9797.
    
    When invoked from system tests under Python 3, app module handler will not be initialized, leaving importers (a private list) as None. By the time does app module exists function is called, this will return an attribute error. Thus return False if this happens.
    
    * App module handler/review actions: return early if importers list is not set. Re #9797.
    
    Reviewed by Mick Curran (NV Access): instead of using a try block, let NVDA say there is no app module if importers list isn't set, seen when invoking this function from system tests.
Commits on Jun 24, 2019
  1. System tests/Python 3: syntax and imports (#9801)

    josephsl authored and michaelDCurran committed Jun 24, 2019
    * System tests: xmlrpclib and SimpleXMLRPCServer -> xmlrpc. Re #9798.
    
    In Python 3, xmlrpclib and SimleXMLRPCServer are part of a unified xmlrpc module (the former is xmlrpc.client and the latter is xmlrpc.server). Thus combine the imports.
    
    * System tests/library: use relative import.
    
    * System tests: basestring -> str.
Commits on Jun 16, 2019
  1. Python 3: use native metaclass definition syntax (#9753)

    josephsl authored and michaelDCurran committed Jun 16, 2019
    * NVDA object: metaclass syntax.
    
    Python 2 classes can specify metaclasses via __metaclass__ attribute, whereas a metaclass keyword argument is required in Python 3. Thus use Python 3 native syntax for specifying metaclasses.
    
    * Excel window object: metaclass syntax.
    
    * Base object: metaclass syntax.
    
    * Browse mode: metaclass syntax.
    
    * Content recog: metaclass syntax.
    
    * Acc prop server: metaclass syntax.
    
    * Settings dialogs: metaclass syntax.
    
    * Speech commands: metaclass syntax.
    
    * Metaclass: remove six.with_metaclass import as Python 3 native metaclass syntax is used.
  2. Input core/input gestures dialog: script function object has no attri…

    josephsl authored and michaelDCurran committed Jun 16, 2019
    …bute __func__. (#9752)
    
    As part of Input Gestures dialog initialization, script function objects are gathered (or at least script infos are gathered). Previously it would work, but in Python 3, attribute erro is raised when trying to obtain script.__func__, with Python 3 claiming that there is no such attribute. Thus remove this attribute which restores Input Gestures dialog.
  3. Python 3: more native imports and modules (#9751)

    josephsl authored and michaelDCurran committed Jun 16, 2019
    * Python Console: __builtin__ -> builtins.
    
    * Add-on handler: cPickle -> pickle
    
    * Add-on handler: six.moves.CStringIO -> io.StringIO
    
    * Update check: cPickle -> pickle
Commits on Jun 15, 2019
  1. Global commands: restore commands affected by division operator diffe…

    josephsl authored and michaelDCurran committed Jun 15, 2019
    …rences between Python 2 and 3 (#9748)
    
    * Global commands/mouse to navigator object: use two slashes to guarantee integers for mouse coordinates. Re #9641.
    
    Move mouse to navigator object command fails in Python 3 because of ytpe differences: user32::SetCursorPos wants integers, but because one slash is used, it'll get floats, causing errors to be logged. Thus guarantee inteers via floor division, thus restoring the said command.
    
    * Global commands/battery status: hours and minutes must be integers. Re #9641.
    
    With just one slash, hours nad minutes for remaining time on battery will get floats when the text format specifies integers. Thus use floor division, restoring battery status command in Python 3.
Commits on Jun 14, 2019
  1. Python 3: zip function -> list(zip), itertools.izip -> zip() (#9729)

    josephsl authored and michaelDCurran committed Jun 14, 2019
    * Language list/Python 3: wrap zip function call inside a list call.
    
    Behavior of zip() functoin has changed - returning a list in Python 2 versus being an iterator in Python 3. Because language handler/language list uses old zip function behavior, wrap this inside a list call.
    
    * IAccessible/IA2mozilla: itertools.izip -> zip, remove itertools import.
    
    * Braille: itertools.izip -> zip function.
    
    * Language handler: remove extraneous whitespace
    
    * Izip to zip (address review actions): simplify comment in language handler, pslit lines in mozilla text iA2 objects.
Commits on Jun 13, 2019
  1. Unittests/Python 3: update syntax, catch unbound method registration …

    josephsl authored and michaelDCurran committed Jun 13, 2019
    …test in extension points as expected failure (#9726)
    
    * Unittest/Python 3: update copyright years. Re #9720.
    
    * Unittest/test driver/Python 3: no more unicode/decoding, proper relative import. Re #9720.
    
    * Unittest/base object tests/Python 3: proper relative import. Re #9720.
    
    * Unittest/braille tests/Python 3: proper relative import. Re #9720.
    
    * Unittest/braille tables/Python 3: dict.itervalues -> dict.values. Re #9720.
    
    * Unittest/control types/Python 3: dict.iteritems -> dict.items. Re #9720.
    
    * Unittest/text provider/Python 3: just use text as given instead of converting it into Unicode first. Re #9720.
    
    * Unittest/script handler/Python 3: assertItemsEqual -> assertCountEqual. Re #9720.
    
    Python 2's unittest documentation states self.assertItemsEqual is replaced by self.assertCountEqual in Python 3, thus follow this directive.
    
    * Unittest/extension points/Python 3: mark unbound method registration test as expected failure. Re #9720.
    
    For some reason unbound method registration test keeps failing in Python 3. Until this is resolved, mark this test as expected failure.
    
    * Unittest/base object/Python 3: self.assertRaisesRegexp -> self.assertRaisesRegex due to deprecation warning. Re #9720.
    
    * Unittests/review action: remove unnecessary comments. Re #9720.
    
    * Unittests/control types: contorlTypes.__dict__ -> vars(contorlTypes). Re #9720.
    
    * Extension points/util: add a comment about failing unittest. Re #9720.
  2. WinConsole handler/Python 3: use floor divisoin assignment operator. Re

    josephsl authored and michaelDCurran committed Jun 13, 2019
    #9641. (#9737)
    
    When calculating console coordinates, Python 2 returns integers but Python 3 returns a float, caused by division assignment operator. Thus use //= instead of /= to guarantee integers. This also resolves backspacing error seen with wrong coordinate type.
Commits on Jun 11, 2019
  1. Check pot: file -> open (#9718)

    josephsl authored and michaelDCurran committed Jun 11, 2019
    * Tests/check pot: update copyright years
    
    * Tests/check pot: file -> open.
Commits on Jun 9, 2019
  1. Python 3: dict.haskey -> key in dict (#9697)

    josephsl authored and michaelDCurran committed Jun 9, 2019
    * Outlook Express app module: dict.has_key -> key in dict. Re #9640.
    
    Python 3 retires dict.has_key in favor of testing for membership (key in dict), thus use this method instead.
    
    * JAB objects: dict.has_key -> key in dict. Re #9640.
  2. Python 3: except exception, e -> except as e (#9698)

    josephsl authored and michaelDCurran committed Jun 9, 2019
    * IAccessible object: except COMError, e -> COMError as e.
    
    In Python 2, the exception statement of the form 'except exception, e' was acceptable, no longer the case in Python 3 (requires 'except exception as e'). Thus use the latter in IAccessible objects and others.
    
    * Adobe Flash object: except COMError, e -> COMError as e.
    
    * Log viewer: except (IOError, OSError), e -> (IOError, OSError) as e.
    
    * Input core: except (configobj.ConfigObjError,UnicodeDecodeError), e -> (configobj.ConfigObjError,UnicodeDecodeError) as e.
    
    * NVDA slave: except exception, e -> exception as e.
    
    * NVWave: except WindowsError, e -> WindowsError as e.
  3. SAPI 5 synth driver: percentage to pitch/rate must return an integer.…

    josephsl authored and michaelDCurran committed Jun 9, 2019
    … Re #9641. (#9699)
    
    Runtime test result: SAPI5 synth driver did not load in Python 3 mode because percentage to rate/pitch were returning floats instead of integers. This has been corrected.
Commits on Jun 8, 2019
  1. Python 3: xrange -> range (#9627)

    josephsl authored and michaelDCurran committed Jun 8, 2019
    * Text infos/offsets/Python 3: remove six.moves.range import. Re #9078.
    
    Although a good compatibility call, it is better to call range function directly. The only place six.moves.range was used was textInfos/offsets.
    
    * Python 3/API handlers: xrange -> range, explanatory comments. Re #9078.
    
    Xrange is gone in Python 3, replaced by range which performs the same thing as xrange.
    The following API handlers were modified: IAccessible, JAB, UIA.
    
    * NVDA objects/top level/Python 3: xrange -> range and explanatory comments. Re #9078.
    
    * NVDAObjects/IAccessible/Python 3: xrange -> range and explanatory comments. Re #9078.
    
    * NVDAObjects/JAB/Python 3: xrange -> range and explanatory comments. Re #9078.
    
    * NVDAObjects/UIA/Python 3: xrange -> range and explanatory comments. Re #9078.
    
    * NVDAObjects/window/Python 3: xrange -> range and explanatory comments. Re #9078.
    
    * NVDA helper/Python 3: xrange -> range. Re #9078.
    
    * UIA browse mode and utilities: xrange -> range. Re #9078.
    
    * API/Python 3: xrange -> range for states set construction and focus ancestor calcualtions. Re #9078.
    
    * App modules/Python 3: xrange -> range except for Skype module. Re #9078.
    
    If Skype app module is planned to be removed, it won't make sense to change xrnage to range. Other than this, other app modules were edited, including Excel, Kindle, Miranda, Outlook, and VIPMud.
    
    * Braille input and output/Python 3: xrange -> range. Re #9078.
    
    * Braille display drivers/Python 3: xrange -> range, mostly involving device identification, status, input devices and connection attempts. Re #9078.
    
    * Config/Python 3: xrange -> range. Re #9078.
    
    * Display model/Python 3: xrange -> range. Re #9078.
    
    * GUI/NVDA controls/Python 3: xrange -> range, mostly dealing with custom check list box handling. Re #9078.
    
    * HW port utils/Python 3: xrange -> range. Re #9078.
    
    * Installer/Python 3: xrange -> range. Re #9078.
    
    * Keyboard and mouse handlers/Python 3: xrange -> range. Re #9078.
    
    * NVDA Ease of Access/Python 3: xrange -> range. Re #9078.
    
    * nvwave/Python 3: xrange -> range. Re #9078.
    
    * NVDA Python Console/Python 3: xrange -> range. Re #9078.
    
    * Queue handler/Python 3: xrange -> range. Re #9078.
    
    * Speech viewer, touch tracker/Python 3: xrange -> range. Re #9078.
    
    * Virtual buffers/Python 3: xrange -> range, mostly states set construction. Re #9078.
    
    * Windows console handler/Python 3: xrange -> range. Re #9078.
    
    * Python 3/range: remove source code comments.
    
    Review by Reef Turner (NV Access): add explanatory comments for code fragments that are unclear at first. Since xrange to range is trivial and clear enough, reomve such comments.
    
    * Speech/Python 3: xrange -> range. Re #9078.
    
    * SAPI5 synth driver/Python 3: xrange -> range. Re #9078.
    
    * NVDAObjects/UIA/Edge/Python 3: wrap range function used in heading level lookup inside a list. Re #9078.
    
    Comment from Leonard de Ruijter (Babbage): there is one genuine need for range function, or at least its Python 2 behavior: EdgeHTML heading lookup, which will lookup heading level text from 1 through 6 inclusive (in a list). Thus wrap this inside a list call.
    
    * IAccessible handler/Python 3: add a note about enumerate() function. Re #9078.
    
    Comment from Leonard de Ruijter (Babbage): try using enumerate() function to access both the index and the value at hand. Note that this may need to be postponed until this is merged into Project Threshold.
  2. Python 3: dictionary iteration/list methods made compatible with Pyth…

    josephsl authored and michaelDCurran committed Jun 8, 2019
    …on 3 (#9671)
    
    * Various modules/Python 3: wrap dict.items/keys/values inside a list call. Re #9067.
    
    Modules such as UIA handler, settings dialogs and others use dict.items/keys/values. This means in Python 2, it returns a list, whereas it returns an iterator in Python 3. Therefore wrap these inside a list call to preserve semantics (also include notes for some of these).
    
    * NVDAObjects/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * IAccessible handler/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * UIA handler and utilities/Python 3: dict.iteritems -> dict.items, dict.iterkeys -> dict.keys. Re #9067.
    
    * Add-on handler/Python 3: dict.itervalues -> dict.values. Re #9067.
    
    * App module handler/Python 3: dict.iteritems -> dict.items, dict.itervalues -> dict.values. Re #9067.
    
    * Base object/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Braille display detection/Python 3: dict.iteritems -> dict.items. Re #9067
    
    * Braille display drivers/Python 3: dict.iteritems -> dict.items, dict.itervalues -> dict.values. Re #9067.
    
    * Character processing/Python 3: dict.iteritems -> dict.items, dict.itervalues -> dict.values. Re #9067.
    
    * Config/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Global plugin handler/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * GUI/Python 3: dict.iteritems -> dict.items, dict.itervalues -> dict.values. Re #9067.
    
    * Input core/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Installer/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Oleacc/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Speech/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Speech XML/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Synth drivers/Python 3: dict.iteritems -> dict.items, dict.itervalues -> dict.values. Re #9067.
    
    * Table utils/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Text infos offsets/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Touch tracker/Python 3: dict.itervalues -> dict.values. Re #9067.
    
    * VK codes/Python 3: dict.iteritems -> dict.items. Re #9067.
    
    * Watchdog/Python 3: dict.iteritems -> dict.items. Re #9067.
  3. Python 3: use importlib for importing modules (#9693)

    josephsl authored and michaelDCurran committed Jun 8, 2019
    * IAccessible objects/Python 3: use importlib. Re #8768.
    
    * App module handler/Python 3: use importlib. Re #8768.
    
    * Braille display drivers/Python 3: use importlib. Re #8768.
    
    * Global plugin handler/Python 3: use importlib. Re #8768.
    
    * Synth drivers/Python 3: use importlib. Re #8768.
  4. Python 3: use floor division (//) to obtain integer results from divi…

    josephsl authored and michaelDCurran committed Jun 8, 2019
    …sion operations (#9692)
    
    * GUI/Python 3: use floor division (//) when obtaining pixel coordinates in integers. Re #9641.
    
    Python 3 changes one slash to tru division rather than classic division. Because of this, when trying to obtain pixel coordinates, float is returned. Thus use floor division (//) to guarantee integers.
    
    * NVWare/Python 3: use floor division for int values. Re #9641.
    
    ctypes.wintypes.WORD is mapped to ctypes.USHORT, which is in fact an integer. Thus use two slashes instead of one in order to guarantee this.
    
    * OneCore speech synthesizer/Python 3: ensure integers via floor division. Re #9641.
    
    A comment says no floating points. One way to ensure this is use of two slashes in Python 3.
  5. Python 3: file function -> open function (#9663)

    josephsl authored and michaelDCurran committed Jun 8, 2019
    * Add-on handler and update check/Python 3: file function -> with open function for reading from and writing to pickle files. Re #9038.
    
    * NVDA helper and watchdog/Python 3: with file -> with open function. Re #9038.
    
    * Config/Python 3: use open function when creating an empty profile data file. Re #9038.
    
    * Build version/Python 3: use with open function when obtaining Git head/commit for version information construction. Re #9038.
    
    Without modifying head/commit values for version info, NVDA will report 'year.major.minor' when running from source. Therefore edit this routine.
    
    * Log viewer/Python 3: add an explanatory note on with open function and encoding issue. Re #9038.
    
    When saving logs, a log file object will be created. The routine responsible for this is eligible for conversion to 'with open' statement, but there is a note about UTF-8 codecs conversion problem. Thus add a note regarding this and exclude that routine from conversion for now.
    
    * Add-on handler and update check/Python 3: use binary format when working with pickles. Re #9038.
    
    Clarified by Mick Curran (NV Access): in Python 3, when loading and dumping pickles, binary format must be used (rb/wb).
    
    * Log viewer/Python 3: save log file in UTF-8 format. Re #9038.
    
    Reviewed by Mick Curran (NV Access): open log file for saving with UTF-8 encoding from the start. Note that Python 2's open function does not include encoding parameter directly, but Python 3 does.
Older
You can’t perform that action at this time.