fixes visible redraw when:
- opening preview screen while cursor in field (as editTimer
fires even if note has not changed)
- moving between cards (as loadNote and rowChanged hooks are both
fired)
Qt.transparent prevents subpixel anti-aliasing from working, resulting
in slightly blurry fonts on non-retina displays.
(The window background color is not determined correctly on macOS, so
we hardcode it.)
Credits for discovering this issue go to the unknown author of
https://ankiweb.net/shared/info/94394764
Supplies information on platform, app, toolkit, and installed add-ons.
Should come in useful to troubleshoot issues that do not produce an
error message, especially for add-on developers.
Sets the foundation for more elaborate additions to the manifest.
Manifest files are still only being read for local imports, but with
this commit that could be easily changed in the future.
If an add-on folder contains only number, but does not contains a
meta.json file, or if this file does not contains a "mod" value, then
the following uninformative message error occur:
```Python
File "aqt/addons.py", line 387, in onCheckForUpdates
File "aqt/addons.py", line 183, in checkForUpdates
File "aqt/addons.py", line 199, in _updatedIds
<class 'TypeError'>: '<' not supported between instances of 'NoneType' and 'int'
```
This is because there is a .get in a code while the None value makes
no sens. Thus, I replaced None by a 0 value. Which ensure that, if the
last modification time is missing, the update will be done. Three case
may occur:
* either the addon is already up to date, and it's only a waste of
bandwidth
* either the add-on is not up to date, and updating was the initial
goal anyway
* Or some change did occur in the add-on folder (which is actually
probably, since it would explain the "missing mod problem"; in this
case this change may be lost, but thout would be the same problem
if the mod number was still there.
Other solutions which I could implement would be:
* asking for the user whether they want to update
* considering that it's not an ankiweb related add-on anymore, and
ignore it.
Adds a new button to the add-on dialog that allows users to select
and install add-ons from local files.
Introduces APKX, a zip-based and manifest-backed filetype for
Anki add-on packages.