diff --git a/.github/workflows/test_linux.yml b/.github/workflows/test_linux.yml index 81584457..295af4b9 100644 --- a/.github/workflows/test_linux.yml +++ b/.github/workflows/test_linux.yml @@ -18,13 +18,13 @@ jobs: with: python-version: ${{ matrix.python-version }} architecture: x64 - - name: Install Packages + - name: Install Packages (apt) run: | sudo apt update - sudo apt install libenchant-dev qt5-default + sudo apt install libenchant-dev qt5-default qttools5-dev-tools - name: Checkout Source uses: actions/checkout@v2 - - name: Install Dependencies + - name: Install Dependencies (pip) run: | pip install --upgrade pip pip install -r requirements.txt @@ -32,6 +32,8 @@ jobs: pip install pytest-cov pip install pytest-qt pip install codecov + - name: Run Build Commands + run: python setup.py qtlrelease sample - name: Run Tests run: | export QT_QPA_PLATFORM=offscreen diff --git a/CHANGELOG.md b/CHANGELOG.md index 60bc72e3..12b3dc92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,35 @@ # novelWriter Changelog +## Version 1.3.1 [2021-05-06] + +### Release Notes + +This is a patch release primarily to fix a problem with the Qt translation library used to make +novelWriter available in multiple languages. One of the function calls made to the library was +added recently, in Qt 5.15, which many users on Linux will not have installed on their system. The +issue could be resolved by updating the library, but it's an unnecessary and inconvenient +restriction. + +### Detailed Changelog + +**Bugfixes** + +* The code to load translation files for the main GUI was using a function in the QTranslate class + that was added in version 5.15, which means novelWriter could not start on a lower version of the + Qt library if translation files were present. We don't want to force users to use Qt 5.15, so the + call has been removed. Issue #773. PR #774. + +**Other Fixes** + +* When generating a new project on Windows, the code that generates the new documents in the + project would create duplicate handles, causing a warning to be printed. The warning is harmless + as the collisions are handled. They are caused by the resolution of the clock available to Python + on Windows being in the tens of millisecond range, much slower than the code generates the new + project files. The solution was to append a counter to the timestamp from the clock, ensuring + that the seed is always unique. Issue #769. PR #776. + +---- + ## Version 1.3 [2021-05-02] ### Release Notes diff --git a/docs/source/int_started.rst b/docs/source/int_started.rst index 79485daf..031284c7 100644 --- a/docs/source/int_started.rst +++ b/docs/source/int_started.rst @@ -106,8 +106,8 @@ Building the Translation Files If you installed novelWriter from a package, the translation files should be pre-built and included. If you're running novelWriter from the source code, you will need to generate the files -yourself. The files you need will be written to the ``i18n`` folder, and will have the ``.qm`` file -extension. +yourself. The files you need will be written to the ``nw/assets/i18n`` folder, and will have the +``.qm`` file extension. You can build the ``.qm`` files with: @@ -115,7 +115,8 @@ You can build the ``.qm`` files with: python3 setup.py qtlrelease -This requires that the Python package ``pylupdate5`` to be installed. +This requires that the Qt Linguist tool is installed on your system. On Ubuntu and Debian, the +needed package is called `qttools5-dev-tools`. .. note:: If you want to improve novelWriter with translation files for another language, or update an diff --git a/i18n/README.md b/i18n/README.md index 82c9ccfa..8f460445 100644 --- a/i18n/README.md +++ b/i18n/README.md @@ -36,9 +36,16 @@ test it. Please do not submit the `.qm` files to the repository. Only the `.ts` files in the `i18n` folder are needed. -**Note:** This requires that you have the tools Qt 5 Linguist and the PyQt5 tool `pylupdate5` +**Note** + +These commands require that you have the tools Qt 5 Linguist and the PyQt5 tool `pylupdate5` installed on your system. +For Ubuntu/Debian, run: +```bash +sudo apt install qttools5-dev-tools pyqt5-dev-tools +``` + ### Missing QtBase Translations The default Qt dialogs also have translations, for instance for standard buttons for "Yes", "No", diff --git a/nw/assets/text/release_notes.htm b/nw/assets/text/release_notes.htm index ba7ecefd..76fd6df0 100644 --- a/nw/assets/text/release_notes.htm +++ b/nw/assets/text/release_notes.htm @@ -2,6 +2,18 @@
+Released on 6 May 2021
+This is a patch release primarily to fix a problem with the Qt translation library used to make +novelWriter available in multiple languages. One of the function calls made to the library was +added recently, in Qt 5.15, which many users on Linux will not have installed on their system. The +issue could be resolved by updating the library, but it's an unnecessary and inconvenient +restriction.
+ +See also the Releases page.
+ +Released on 2 May 2021
The main feature of the 1.3 release is internationalisation. The release introduces support for @@ -24,7 +36,5 @@ provided the translation file for chapter numbers in German.
The work to rewrite novelWriter to allow for internationalisation was done by Bruno Meneguello and Veronica Berglyd Olsen.
-See also the Releases page.
- diff --git a/nw/config.py b/nw/config.py index b2703d77..65436608 100644 --- a/nw/config.py +++ b/nw/config.py @@ -391,7 +391,7 @@ class Config: lngFile = "%s_%s" % (lngBase, lngCode.replace("-", "_")) if lngFile not in self.qtTrans: if qTrans.load(lngFile, lngPath): - logger.debug("Loaded: %s" % qTrans.filePath()) + logger.debug("Loaded: %s" % os.path.join(lngPath, lngFile)) nwApp.installTranslator(qTrans) self.qtTrans[lngFile] = qTrans diff --git a/nw/core/tree.py b/nw/core/tree.py index b0c0340c..9a6c3050 100644 --- a/nw/core/tree.py +++ b/nw/core/tree.py @@ -77,6 +77,7 @@ class NWTree(): self._treeChanged = False # True if tree structure has changed self._handleSeed = None # Used for generating handles for testing + self._handleCount = 0 # A counter that is added to the handle generator return @@ -515,7 +516,8 @@ class NWTree(): handle requests come faster than the clock resolution. """ if self._handleSeed is None: - newSeed = str(time()) + addSeed + newSeed = "%s_%d_%s" % (str(time()), self._handleCount, addSeed) + self._handleCount += 1 else: # This is used for debugging newSeed = str(self._handleSeed) diff --git a/nw/guimain.py b/nw/guimain.py index 529606ca..d9c1ce27 100644 --- a/nw/guimain.py +++ b/nw/guimain.py @@ -371,9 +371,9 @@ class GuiMain(QMainWindow): logger.info("Creating new project") if self.theProject.newProject(projData): + self.hasProject = True self.rebuildTrees() self.saveProject() - self.hasProject = True self.docEditor.setDictionaries() self.rebuildIndex(beQuiet=True) self.statusBar.setRefTime(self.theProject.projOpened) diff --git a/sample/nwProject.nwx b/sample/nwProject.nwx index a61941a2..8310806e 100644 --- a/sample/nwProject.nwx +++ b/sample/nwProject.nwx @@ -1,13 +1,13 @@ -