2.0.1-4 — July 2026

Build dependency update — python3-all replaced with python3 in debian/control.

Changed

  • Build dependency python3-all replaced with python3.

2.0.1-3 — June 2026

Polkit dependency updated to polkitd, the correct package name in current Debian. Removed obsolete policykit-1-gnome and policykit-1 alternatives.

Fixed

  • Polkit dependency: Updated to polkitd, the correct package name in current Debian. Removed obsolete policykit-1-gnome and policykit-1 alternatives that no longer exist, preventing packaging warnings on installation.

2.0.1-2 — June 2026

Base themes auto-seeded on first launch with a Restore button, one-time v1.x legacy cleanup, reduced packaging dependencies and asset path fixes.

Added

  • Themes tab — base themes auto-seeded on first launch: Bundled .sth files in assets/base-themes/ are imported automatically into ~/.config/soplos-theme-manager/themes/ on startup if not already present. No pkexec, no prompts. If the user deletes a base theme it is not reimposed — a manual restore is required.
  • Themes tab — Restore button: New button in the gallery toolbar reimports any missing base themes on demand. Already-present themes are skipped. Shows an info dialog if all base themes are present.
  • Startup — v1.x legacy cleanup: On first launch after upgrade from v1.x, removes legacy artifacts: ~/xfce-panel-backup/, ~/.themes-backup/ and legacy logs under ~/.config/soplos-theme-manager/logs/. Runs once and writes a marker file to avoid repeating.

Fixed

  • Packaging — reduced dependencies: debian/control was pulling in multiple polkit-related packages unnecessarily. Reduced to just polkit.
  • Base themes seed — wrong asset path: Seed and Restore button were looking for .sth files in assets/soplos-base-themes/ instead of assets/base-themes/.
  • User-scope install — system assets duplicated to home: _install_tar_user was copying icon themes and GTK themes to ~/.icons/ and ~/.themes/ even when the same asset already existed in /usr/share/. Assets present at system level are now skipped.

2.0.1 — June 2026

Theme bundle format v2/v3 (portable .sth with real GTK/icon/cursor assets), apply scope dialog, export file chooser, and a comprehensive audit of apply/save/export/install fixing silent data loss, orphan plugin files, dark mode persistence and icon symlink breakage.

Added

  • Theme scope selection: When applying a theme a dialog asks whether to install assets for the current user (~/.themes, ~/.icons) or globally for all users (/usr/share/themes, /usr/share/icons). Global install uses pkexec for privilege elevation.
  • Export — file chooser dialog: Exporting a theme now opens a FileChooserDialog so the user can pick the destination path.

Changed

  • Theme bundle format v2 (breaking — old .sth files not compatible): Bundles now contain the actual asset directories (GTK theme, icon theme, cursor, wallpaper) as a .zip archive instead of xfconf dumps. Themes stored unpacked under ~/.config/soplos-theme-manager/themes/ with metadata.json + theme.conf + assets/ + preview/.
  • Apply theme — visual-only xfconf changes: apply_theme now sets only visual xfconf properties (GTK theme, icon theme, cursor, WM theme, wallpaper). No longer touches keyboard shortcuts, desktop icon visibility, desktop menu or any behavioral property.
  • Apply theme — no XML file copying and no panel directory overwrite: xfce4-desktop.xml, xfce4-panel.xml and ~/.config/xfce4/panel/ are no longer touched on apply. Panel layout and desktop behavior remain fully under user control.
  • Theme store location: User themes moved from ~/.themes-backup/ to ~/.config/soplos-theme-manager/themes/. Preview directory renamed from view/ to preview/.
  • Bundle format v3: Assets stored as tars (gtk.tar, icons.tar, cursor.tar) inside the bundle instead of raw directory trees. Old v2 bundles rejected on import.
  • UI — Themes gallery: Card grid wrapped in a dark rounded box (soplos-content class), matching Plymouth Manager style. Selected theme card shows a thin 1px orange border; fixed FlowBoxChild container painting solid orange on selection.

Fixed

  • Apply theme — keyboard shortcuts, desktop icons and docklike apps overwritten: shortcuts.conf, desktop icon/menu properties and panel/ directory were applied unconditionally, replacing the user's settings. All three now left untouched.
  • Apply theme — wallpaper paths hardcoded from source machine: The old format stored absolute paths (e.g. /home/soplos/.themes-backup/…), causing broken wallpapers on any other machine. Fixed by bundling the actual wallpaper file.
  • Apply theme — xfconfd served cached panel config: After writing xfce4-panel.xml, xfconfd restarted from its in-memory copy. Fixed by killing xfconfd after xfce4-panel --quit so it re-reads from disk.
  • Apply/save theme — orphan panel plugin files: Files from previous panel sessions accumulated in ~/.config/xfce4/panel/ and bled into saved themes. Apply and save now filter by IDs present in xfce4-panel.xml; orphan files removed after apply.
  • Apply/save theme — dark mode not persisted: gtk-application-prefer-dark-theme was not saved or restored. Now stored as prefer_dark in theme.conf and written to both ~/.config/gtk-3.0/settings.ini and ~/.config/gtk-4.0/settings.ini on apply. Inferred from GTK theme name when settings.ini is absent.
  • Apply theme — panel structure never changed: _read_docklike_apps was called with two arguments but only accepted one, causing a silent TypeError that aborted _apply_panel_config on every run. Fixed: method now accepts xml_path as optional parameter.
  • Docklike service — wrong plugin ID and removed restart flag: find_config_file() used a glob that could return orphan .rc files. Now parses xfce4-panel.xml directly. restart_panel() replaced --restart (removed in XFCE 4.20) with --quit + Popen.
  • Export — icon theme symlinks and incomplete family: Symlinked icon variants (e.g. Tela-ubuntu-dark → ../Tela-ubuntu/) were broken in the bundle. Export now uses tar -czf -C base_dir preserving symlinks. _find_icon_dependencies() reads Inherits= recursively and bundles the full icon family.
  • Install global — existing assets destroyed and wrong ownership: _global_install() ran rm -rf on the destination before copying. Now extracts to temp and moves only dirs not already at destination. Tar extraction without preserve flags gives correct root ownership; chmod -R a+rX applied after install.
  • Install global — pkexec script leaked temp dir on tar failure: trap 'rm -rf "$TMPEXTR"' EXIT added for guaranteed cleanup.

2.0.0-2 — June 2026

Panel tab hot-apply for all plugin operations (move, remove, add), Settings button for plugin configuration dialogs, threading lock, and a wide range of Panel, Dock and core fixes.

Added

  • Panel tab — hot apply for plugin operations: Moving, removing and adding plugins now takes effect immediately via xfconf + panel restart, without needing "Save & Apply". New plugins get a real ID assigned at add time.
  • Panel tab — Settings button: Gear button added to the active plugins list to open a plugin's own configuration dialog.
  • Panel tab — error dialog on apply failure, threading lock and _build_module_map() helper: Apply failures now show a warning dialog. self._panel_lock serializes all xfconf write + restart operations. _build_module_map() avoids repeated .desktop file scans.

Fixed

  • Panel tab — move/remove/add not applied live: Plugin list changes now immediately write to xfconf and restart the panel.
  • Panel tab — apply killed panel before writing xfconf: xfce4-panel saved its in-memory state on top of our changes. Now writes to xfconf first, then restarts only if plugin IDs changed.
  • Panel tab — new and delete panel teardown order: New panel now writes all properties before updating /panels. Delete panel removes plugin xfconf entries before updating /panels and restarting.
  • Panel tab — plugin modules used wrong key: _scan_available_plugins used X-XFCE-Module value; xfconf stores the .desktop filename stem. Fixed to use f.stem.
  • Panel tab — reload after successful apply: Plugin list reloaded after "Save & Apply" so ID=0 placeholders are replaced with real IDs.
  • Dock tab — icon size and missing icon_path column: Pixbuf reused from the 32px list was shown at 48px causing blur. icon_path added as column 3 to apps_store so icons reload at the correct size.
  • Docklike service — hidden apps, icon fallback and broken entries: Apps with NoDisplay=true or Hidden=true now filtered via app_info.should_show(). Icon resolution now falls back to name-string lookup. Exceptions return None instead of a partial dict.
  • Theme service — xfce4-panel launched from wrong directory: Popen(['xfce4-panel']) now passes cwd=Path.home().
  • core/application — theme conf migration failed on root-owned files: Path.rename() replaced with shutil.copy2 + unlink, wrapped in try/except OSError.

2.0.0-1 — May 2026

Critical fixes for the Panel tab (width, locale, plugin IDs, position, struts, async reload, array writes), desktop file, keyboard shortcuts and wrapper script. Theme conf files renamed to English.

Fixed

  • Panel tab — width not respected: length-adjust was not written back when length was unchanged, causing XFCE to default to 100%. Fixed by preserving the original value and recalculating when length changes.
  • Panel tab — locale decimal separator: xfconf-query returns 52,083333 on Spanish locale; float() raised ValueError. Fixed by replacing , with . before parsing.
  • Panel tab — plugin ID collision on new panel: New panel's plugin IDs started from 1, overwriting main panel plugins. Fixed by computing next_id across all panels.
  • Panel tab — wrong p values: Position string p values corrected from confirmed Soplos theme XMLs: p=6 top, p=8 bottom, p=10 left, p=1 right.
  • Panel tab — alignment ignored for snapped panels: Switched to p=0 floating with center coordinates for partial-width panels. Full-width panels use snapped p values so the WM receives _NET_WM_STRUT hints.
  • Panel tab — windows maximizing under top panel: enable-struts property was not being set. Now written as true on every apply and new panel creation.
  • Panel tab — async reload cleared user-added plugins: _reload_worker called after new panel creation wiped plugins the user had just added. Fixed by reading settings synchronously in _on_new_panel_done.
  • Panel tab — delete panel removed all panels: _set_array wrote single-element arrays as xfconf scalars; xfce4-panel could not read /panels as a list. Fixed by adding --force-array flag to all _set_array calls.
  • Panel tab — length change did not trigger position recalculation: Switching between 100% and partial width did not update the position string. Fixed by including length_changed in the recalculation condition.
  • Desktop file empty: debian/org.soplos.thememanager.desktop was 0 bytes — app did not appear in the XFCE menu. Rewritten with full [Desktop Entry] content.
  • Keyboard shortcuts Ctrl+Tab / Ctrl+Shift+Tab not working: GTK intercepts these inside child widgets before AccelGroup fires. Fixed by connecting key-press-event on the main window.
  • Wrapper script oversized: Simplified to the standard Soplos wrapper pattern (exec python3 main.py). Gdk.set_program_class moved to main.py.

Changed

  • Theme conf filenames: Renamed from Spanish (tema.conf, fondo.conf, atajos.conf) to English (theme.conf, wallpaper.conf, shortcuts.conf). Automatic migration runs on startup.
  • Metainfo screenshots: Corrected URLs and added screenshot4 (Panel) and screenshot5 (Dock).
  • Panel tab — alignment combo: Added Left/Center/Right alignment control. Alignment derived from coordinates on load and applied when building the position string.
  • Panel tab — new panel default position: Replaced hardcoded p=2 with _build_position_string('top', 1, 100, 30) calculated from actual screen resolution.

2.0.0 — April 2026

Complete modular rewrite with tabbed interface, theme bundle export (.sth), screenshot previews and full XFCE panel and dock management.

Added

  • Complete modular rewrite: New architecture with core/, services/, ui/tabs/, config/ and utils/ layers.
  • Tabbed interface: Themes, Wallpapers, User, Panel and Dock — all in one window.
  • Wallpaper browser: Scans system wallpaper directories, deduplicates symlinks, lazy-loads on tab activation.
  • Avatar manager: Replaces Mugshot. Crop dialog for non-square images, writes to ~/.face and AccountsService. Editable user data fields (Full Name, Email, Phone, Location).
  • User tab — Groups column: Shows all groups the user belongs to with checkboxes. Applies changes via pkexec usermod -G (standard Polkit dialog).
  • Panel tab: Full XFCE panel configuration — position, size, icon size, length, rows, auto-hide, dark mode, lock. Plugin management with move, remove and searchable add.
  • Dock tab: Dedicated tab for Docklike pinned apps. Shows pinned apps with icons, move up/down/remove, add from available apps browser.
  • Theme bundles (.sth): Export and import themes as tar.gz archives with manifest.json.
  • Screenshot previews: scrot + imagemagick capture with notify-send notification, wmctrl desktop minimize/restore.
  • Footer progress bar: Soplos-standard Gtk.Revealer + Gtk.ProgressBar for all operations.
  • App ID: Migrated from com.soplos.thememanager to org.soplos.thememanager.
  • i18n: gettext-based internationalization with 8 languages, replacing legacy dictionary strings.
  • CSS: Updated to Soplos Welcome standard (entry, filechooser, treeview, notebook borders).

Changed

  • Theme directory: ~/.themes-backup (backwards compatible with v1).
  • Default theme CSS: Always dark for Soplos Linux Tyron, configurable via settings.json.
  • Window decorations: SSD (no CSD), GTK_CSD=0.
  • Wallpaper browser: Pixbuf decoding moved to background thread — gallery renders instantly. Reload button removed (load is automatic on tab activation).
  • User tab: Renamed from "Avatar" to "User". Apply button moved inside the form column; groups column added.
  • Panel & Dock: Split into two independent tabs — Panel (settings + plugins) and Dock (Docklike pinned apps).

Fixed

  • Startup freeze: Wallpapers now lazy-load via GTK map signal.
  • Wrong startup tab: set_current_page(0) called after show_all() + GLib.idle_add safety net.
  • Theme detection: Reads ~/.themes-backup (same as v1) instead of a new separate directory.
  • Avatar detection: Checks ~/.face → AccountsService icons → Icon= field in user file.
  • Panel apply error: [Errno 21] Is a directory on launcher-N/ subdirectories resolved.
  • pkexec password prompts on avatar: Removed all pkexec~/.face is sufficient on XFCE.
  • D-Bus AccountsService blocking main thread: Split into sync (LibreOffice + GECOS) and async (D-Bus via thread + GLib.idle_add).
  • xfconf-query timeout on theme apply: xfconf-query now runs before pkill xfconfd, not after.
  • Docklike pinned app icons not showing: Bare app IDs now resolved via Gio.DesktopAppInfo with multi-directory fallback.
  • Groups not detected: Replaced grp.getgrall() with id -Gn (reads all NSS sources).

1.0.7 — July 2025

Branding update.

Changed

  • Program icon: Updated to new design.
  • Developer: Updated to Sergi Perich.

1.0.6 — May 2025

Packaging fix: naming convention restored.

Fixed

  • Icon and desktop file naming: Reverted to com.soplos.thememanager convention for consistency.
  • Desktop file path: Restored to /usr/share/applications/com.soplos.thememanager.desktop.

1.0.5 — May 2025

Packaging fix: metainfo App ID corrected.

Fixed

  • Metainfo App ID: Corrected from com.soplosthememanager back to com.soplos.thememanager (dot notation restored).

1.0.4 — May 2025

Packaging fix: unified App ID and improved desktop integration.

Added

  • Unified App ID constant APP_ID = "com.soplos.thememanager" across main.py.
  • WMCLASS env var support: WMCLASS environment variable for consistent window class assignment.
  • window.realize(): Called before show for proper window property propagation.

1.0.3 — May 2025

Packaging fix: App ID block and base directory restored.

Fixed

  • Soplos Packager App ID block: Re-injected after it was removed in 1.0.2.
  • Base directory: Corrected path back to /usr/share/soplos-theme-manager.

1.0.2 — May 2025

Packaging: renamed all assets to soplos-theme-manager naming convention.

Changed

  • Asset naming: Renamed from com.soplos.thememanager to soplos-theme-manager convention (desktop file, metainfo, icons).
  • WM_CLASS: Fixed to static strings "soplos-theme-manager", "Soplos Theme Manager".
  • Removed debug_wmclass.py.
  • Cleaned up Soplos Packager App ID injection block from main.py.

1.0.1 — May 2025

Desktop integration: XFCE-specific categories and visibility.

Changed

  • Desktop file: Added OnlyShowIn=XFCE; and X-XfcePluggable=true.
  • Categories: Updated to XFCE-specific settings (XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-PersonalSettings;).

1.0.0 — May 2025

Initial release of Soplos Theme Manager.

Initial Release

  • Graphical interface for managing XFCE desktop themes.
  • Create, save and apply desktop themes.
  • Compatible with Soplos Linux Tyron.
  • Translations for 8 languages.