Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package mcomix for openSUSE:Factory checked in at 2026-09-10 11:48:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mcomix (Old) and /work/SRC/openSUSE:Factory/.mcomix.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mcomix" Thu Sep 10 11:48:57 2026 rev:10 rq:1376753 version:3.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/mcomix/mcomix.changes 2025-10-14 18:09:57.850966971 +0200 +++ /work/SRC/openSUSE:Factory/.mcomix.new.1265/mcomix.changes 2026-09-10 11:51:59.027081498 +0200 @@ -1,0 +2,19 @@ +Wed Sep 9 18:25:46 UTC 2026 - Giacomo Comes <[email protected]> + +- remove Leap 15.x dependencies + +------------------------------------------------------------------- +Sat Aug 22 20:42:43 UTC 2026 - Dirk Müller <[email protected]> + +- update to 3.2.0: + * Adapt keybinding handling to changed API of + Gtk.accelerator_parse in newer versions of Gtk. This fixes + broken keybindings. + * The pytest package needed for running MComix' unit tests is + now installed when installing the `dev` dependency group. + * MComix now respects the XDG Thumbnail Directory specification + (again), and will store thumbnails relative to XDG_CACHE_HOME instead + of relative to the home directory on UNIX systems. Nothing + changes + +------------------------------------------------------------------- Old: ---- mcomix-3.1.1.tar.gz New: ---- mcomix-3.2.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mcomix.spec ++++++ --- /var/tmp/diff_new_pack.eKGPvd/_old 2026-09-10 11:51:59.840115595 +0200 +++ /var/tmp/diff_new_pack.eKGPvd/_new 2026-09-10 11:51:59.844115763 +0200 @@ -1,7 +1,7 @@ # # spec file for package mcomix # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,14 +16,10 @@ # -%if 0%{?suse_version} >= 1600 %define pythons python3 -%else -%define pythons python311 -%endif Name: mcomix -Version: 3.1.1 +Version: 3.2.0 Release: 0 Summary: Comics Viewer License: GPL-2.0-only @@ -34,11 +30,8 @@ BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} BuildRequires: gobject-introspection -%if 0%{?suse_version} > 1600 -Requires: python3-PyMuPDF -%else -Requires: mupdf -%endif +Requires: ( %{pythons}-PyMuPDF or mupdf ) +Suggests: %{pythons}-PyMuPDF Requires: %{pythons} Requires: %{pythons}-Pillow Requires: %{pythons}-chardet ++++++ mcomix-3.1.1.tar.gz -> mcomix-3.2.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/ChangeLog.md new/mcomix-3.2.0/ChangeLog.md --- old/mcomix-3.1.1/ChangeLog.md 2025-09-06 13:03:50.000000000 +0200 +++ new/mcomix-3.2.0/ChangeLog.md 2026-08-20 11:18:04.214536700 +0200 @@ -1,3 +1,23 @@ +# MComix 3.2.0 +## Release date: 2026-08-20 + +### Bug fixes + +- Adapt keybinding handling to changed API of Gtk.accelerator_parse + in newer versions of Gtk. This fixes broken keybindings. +- The pytest package needed for running MComix' unit tests is now + installed when installing the `dev` dependency group. + +### Features + +- MComix now respects the XDG Thumbnail Directory specification (again), + and will store thumbnails relative to XDG_CACHE_HOME instead of + relative to the home directory on UNIX systems. Nothing changes + on Windows. Note: Existing thumbnails in the former cache directory + ($HOME/.thumbnails) are not moved automatically by this update. +- Added new sort order option (GLib order) that uses GTK collate keys + when computing file order. + # MComix 3.1.1 ## Release date: 2025-09-06 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/PKG-INFO new/mcomix-3.2.0/PKG-INFO --- old/mcomix-3.1.1/PKG-INFO 2025-09-06 13:06:32.493598000 +0200 +++ new/mcomix-3.2.0/PKG-INFO 2026-08-20 11:21:43.389224300 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: mcomix -Version: 3.1.1 +Version: 3.2.0 Summary: GTK comic book viewer Author: Pontus Ekberg Maintainer: The MComix Team @@ -373,6 +373,7 @@ Requires-Dist: chardet; extra == "fileformats" Requires-Dist: PyMuPDF>=1.19.2; extra == "fileformats" Provides-Extra: dev +Requires-Dist: pytest; extra == "dev" Requires-Dist: pyinstaller; os_name == "nt" and extra == "dev" Requires-Dist: build; extra == "dev" Requires-Dist: pip-review; extra == "dev" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/mcomix/constants.py new/mcomix-3.2.0/mcomix/constants.py --- old/mcomix-3.1.1/mcomix/constants.py 2025-09-06 13:03:50.000000000 +0200 +++ new/mcomix-3.2.0/mcomix/constants.py 2026-08-20 11:18:04.214536700 +0200 @@ -8,14 +8,14 @@ from mcomix import tools APPNAME = 'MComix' -VERSION = '3.1.1' +VERSION = '3.2.0' HOME_DIR = tools.get_home_directory() CONFIG_DIR = tools.get_config_directory() DATA_DIR = tools.get_data_directory() BASE_PATH = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) -THUMBNAIL_PATH = os.path.join(HOME_DIR if sys.platform != 'win32' else DATA_DIR, '.thumbnails/normal') +THUMBNAIL_PATH = tools.get_thumbnail_directory() LIBRARY_DATABASE_PATH = os.path.join(DATA_DIR, 'library.db') LASTPAGE_DATABASE_PATH = os.path.join(DATA_DIR, 'lastreadpage.db') LIBRARY_COVERS_PATH = os.path.join(DATA_DIR, 'library_covers') @@ -77,7 +77,7 @@ SHOW_DOUBLE_AS_ONE_TITLE, SHOW_DOUBLE_AS_ONE_WIDE = 1, 2 MAX_LIBRARY_COVER_SIZE = 500 -SORT_NAME, SORT_PATH, SORT_SIZE, SORT_LAST_MODIFIED, SORT_NAME_LITERAL = 1, 2, 3, 4, 5 +SORT_NAME, SORT_PATH, SORT_SIZE, SORT_LAST_MODIFIED, SORT_NAME_LITERAL, SORT_NAME_GLIB = 1, 2, 3, 4, 5, 6 SORT_DESCENDING, SORT_ASCENDING = 1, 2 SIZE_HUGE, SIZE_LARGE, SIZE_NORMAL, SIZE_SMALL, SIZE_TINY = MAX_LIBRARY_COVER_SIZE, 300, 250, 125, 80 RENDER_SIZE_LIMIT = 100000 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/mcomix/file_handler.py new/mcomix-3.2.0/mcomix/file_handler.py --- old/mcomix-3.1.1/mcomix/file_handler.py 2023-09-08 06:45:47.000000000 +0200 +++ new/mcomix-3.2.0/mcomix/file_handler.py 2026-08-20 11:16:25.786536700 +0200 @@ -7,7 +7,7 @@ import threading import re import pickle -from gi.repository import Gtk +from gi.repository import Gtk, GLib from mcomix.preferences import prefs from mcomix import archive_extractor @@ -323,6 +323,8 @@ tools.alphanumeric_sort(filelist) elif prefs['sort archive by'] == constants.SORT_NAME_LITERAL: filelist.sort() + elif prefs['sort archive by'] == constants.SORT_NAME_GLIB: + filelist.sort(key=lambda filename: GLib.utf8_collate_key_for_filename(os.path.basename(filename), -1)) else: # No sorting pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/mcomix/file_provider.py new/mcomix-3.2.0/mcomix/file_provider.py --- old/mcomix-3.1.1/mcomix/file_provider.py 2023-09-08 06:45:47.000000000 +0200 +++ new/mcomix-3.2.0/mcomix/file_provider.py 2026-08-20 11:16:25.786536700 +0200 @@ -4,6 +4,7 @@ import os import re +from gi.repository import GLib from mcomix import image_tools from mcomix import archive_tools @@ -69,6 +70,8 @@ The list is sorted in-place. """ if preferences.prefs['sort by'] == constants.SORT_NAME: tools.alphanumeric_sort(files) + elif preferences.prefs['sort by'] == constants.SORT_NAME_GLIB: + files.sort(key=lambda filename: GLib.utf8_collate_key_for_filename(os.path.basename(filename), -1)) elif preferences.prefs['sort by'] == constants.SORT_LAST_MODIFIED: # Most recently modified file first files.sort(key=lambda filename: os.path.getmtime(filename)*-1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/mcomix/keybindings.py new/mcomix-3.2.0/mcomix/keybindings.py --- old/mcomix-3.1.1/mcomix/keybindings.py 2024-01-01 14:07:23.000000000 +0100 +++ new/mcomix-3.2.0/mcomix/keybindings.py 2026-08-20 11:16:25.798536800 +0200 @@ -176,7 +176,7 @@ # Load stored keybindings, or fall back to passed arguments keycodes = self._action_to_bindings[name] if keycodes == []: - keycodes = [Gtk.accelerator_parse(binding) for binding in bindings ] + keycodes = [tuple(Gtk.accelerator_parse(binding)) for binding in bindings] for keycode in keycodes: if keycode in list(self._binding_to_action.keys()): @@ -207,7 +207,7 @@ """ assert name in BINDING_INFO, "'%s' isn't a valid keyboard action." % name - nb = Gtk.accelerator_parse(new_binding) + nb = tuple(Gtk.accelerator_parse(new_binding)) old_action_with_nb = self._binding_to_action.get(nb) if old_action_with_nb is not None: # The new key is already bound to an action, erase the action @@ -216,7 +216,7 @@ if old_binding and name != old_action_with_nb: # The action already had a key that is now being replaced - ob = Gtk.accelerator_parse(old_binding) + ob = tuple(Gtk.accelerator_parse(old_binding)) self._binding_to_action[nb] = name # Remove action bound to the key. @@ -238,7 +238,7 @@ """ Remove binding for an action """ assert name in BINDING_INFO, "'%s' isn't a valid keyboard action." % name - ob = Gtk.accelerator_parse(binding) + ob = tuple(Gtk.accelerator_parse(binding)) self._action_to_bindings[name].remove(ob) self._binding_to_action.pop(ob) @@ -299,7 +299,7 @@ for action in BINDING_INFO.keys(): if action in stored_action_bindings: bindings = [ - Gtk.accelerator_parse(keyname) + tuple(Gtk.accelerator_parse(keyname)) for keyname in stored_action_bindings[action] ] self._action_to_bindings[action] = bindings for binding in bindings: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/mcomix/main.py new/mcomix-3.2.0/mcomix/main.py --- old/mcomix-3.1.1/mcomix/main.py 2024-08-19 06:40:13.000000000 +0200 +++ new/mcomix-3.2.0/mcomix/main.py 2026-08-20 11:16:25.798536800 +0200 @@ -266,6 +266,8 @@ self._event_handler.drag_n_drop_event) self.uimanager.set_sensitivities() + # Restore twice, before and after show(), to make sure it works... + self.restore_window_geometry() self.show() self.restore_window_geometry() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/mcomix/preferences_dialog.py new/mcomix-3.2.0/mcomix/preferences_dialog.py --- old/mcomix-3.1.1/mcomix/preferences_dialog.py 2024-08-19 06:40:13.000000000 +0200 +++ new/mcomix-3.2.0/mcomix/preferences_dialog.py 2026-08-20 11:16:25.798536800 +0200 @@ -489,6 +489,7 @@ sortkey_items = ( (_('No sorting'), 0), (_('File name'), constants.SORT_NAME), + (_('File name (GLib)'), constants.SORT_NAME_GLIB), (_('File size'), constants.SORT_SIZE), (_('Last modified'), constants.SORT_LAST_MODIFIED)) @@ -537,7 +538,8 @@ sortkey_items = ( (_('No sorting'), 0), (_('Natural order'), constants.SORT_NAME), - (_('Literal order'), constants.SORT_NAME_LITERAL)) + (_('Literal order'), constants.SORT_NAME_LITERAL), + (_('GLib order'), constants.SORT_NAME_GLIB)) sortkey_box = self._create_combobox(sortkey_items, prefs['sort archive by'], self._sort_archive_by_changed_cb) @@ -557,7 +559,9 @@ label = _("Files within archives will be sorted according to the order specified here. " "Natural order will sort numbered files based on their natural order, " "i.e. 1, 2, ..., 10, while literal order uses standard C sorting, " - "i.e. 1, 2, 34, 5.") + "i.e. 1, 2, 34, 5. " + "GLib order will sort files using collate keys generated by GLib/GTK, " + "used by many other GTK applications.") sortkey_box.set_tooltip_text(label) sortorder_box.set_tooltip_text(label) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/mcomix/tools.py new/mcomix-3.2.0/mcomix/tools.py --- old/mcomix-3.1.1/mcomix/tools.py 2023-09-16 13:58:54.000000000 +0200 +++ new/mcomix-3.2.0/mcomix/tools.py 2026-08-20 11:16:25.798536800 +0200 @@ -114,6 +114,22 @@ return os.path.join(base_path, 'mcomix') +def get_thumbnail_directory() -> str: + """Return the path to the MComix thumbnail directory. On UNIX, this will + be in $XDG_CACHE_HOME. On Windows, DATA_DIR will be used. Refer to + https://specifications.freedesktop.org/thumbnail/latest/directory.html + for more information. + """ + if sys.platform == 'win32': + cache_dir = os.path.join(get_data_directory(), '.thumbnails') + else: + cache_dir = os.getenv('XDG_CACHE_HOME', + os.path.join(get_home_directory(), '.cache')) + cache_dir = os.path.join(cache_dir, 'thumbnails') + + return os.path.join(cache_dir, 'normal') + + def number_of_digits(n: int) -> int: if 0 == n: return 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/mcomix.egg-info/PKG-INFO new/mcomix-3.2.0/mcomix.egg-info/PKG-INFO --- old/mcomix-3.1.1/mcomix.egg-info/PKG-INFO 2025-09-06 13:06:32.000000000 +0200 +++ new/mcomix-3.2.0/mcomix.egg-info/PKG-INFO 2026-08-20 11:21:43.250572400 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: mcomix -Version: 3.1.1 +Version: 3.2.0 Summary: GTK comic book viewer Author: Pontus Ekberg Maintainer: The MComix Team @@ -373,6 +373,7 @@ Requires-Dist: chardet; extra == "fileformats" Requires-Dist: PyMuPDF>=1.19.2; extra == "fileformats" Provides-Extra: dev +Requires-Dist: pytest; extra == "dev" Requires-Dist: pyinstaller; os_name == "nt" and extra == "dev" Requires-Dist: build; extra == "dev" Requires-Dist: pip-review; extra == "dev" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/mcomix.egg-info/requires.txt new/mcomix-3.2.0/mcomix.egg-info/requires.txt --- old/mcomix-3.1.1/mcomix.egg-info/requires.txt 2025-09-06 13:06:32.000000000 +0200 +++ new/mcomix-3.2.0/mcomix.egg-info/requires.txt 2026-08-20 11:21:43.253209400 +0200 @@ -3,6 +3,7 @@ Pillow>=6.0.0 [dev] +pytest build pip-review python-lsp-server[flake8] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mcomix-3.1.1/pyproject.toml new/mcomix-3.2.0/pyproject.toml --- old/mcomix-3.1.1/pyproject.toml 2023-09-16 20:32:27.000000000 +0200 +++ new/mcomix-3.2.0/pyproject.toml 2026-08-20 11:16:25.798536800 +0200 @@ -31,6 +31,8 @@ "PyMuPDF>=1.19.2" ] dev = [ + # For running tests + "pytest", # For building Windows package "pyinstaller; os_name == 'nt'", # For creating source package
