diff --git a/.gitignore b/.gitignore index e316004..99ee0ca 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,6 @@ workrave-1.9.1.tar.gz /workrave-v1_11_0_beta_12.tar.gz /workrave-v1_11_0_beta_13.tar.gz /workrave-v1_11_0_rc_1.tar.gz +/workrave-v1_11_0_rc_3.tar.gz +/workrave-v1_11_0_rc_4.tar.gz +/workrave-v1_11_1.tar.gz diff --git a/1be2073.patch b/1be2073.patch deleted file mode 100644 index 692f402..0000000 --- a/1be2073.patch +++ /dev/null @@ -1,206 +0,0 @@ -From 1be2073a41691ff4db909b1b04de465c3e2c92dc Mon Sep 17 00:00:00 2001 -From: Rob Caelers -Date: Sat, 22 Mar 2025 17:57:22 +0100 -Subject: [PATCH] Make muilti-monitor support most robust (#606) - ---- - ui/app/Application.cc | 16 ++++++++++--- - ui/app/toolkits/gtkmm/IToolkitPrivate.hh | 3 ++- - ui/app/toolkits/gtkmm/MainWindow.cc | 14 ++++++++++-- - ui/app/toolkits/gtkmm/Toolkit.cc | 29 +++++++++++++++++++++--- - ui/app/toolkits/gtkmm/Toolkit.hh | 2 +- - ui/app/toolkits/qt/IToolkitPrivate.hh | 2 +- - 6 files changed, 55 insertions(+), 11 deletions(-) - -diff --git a/ui/app/Application.cc b/ui/app/Application.cc -index a88e6e49f..f3f7751b0 100644 ---- a/ui/app/Application.cc -+++ b/ui/app/Application.cc -@@ -152,6 +152,7 @@ Application::init_configurator() - { - if (std::filesystem::is_regular_file(ini_file)) - { -+ spdlog::info("Using INI configuration file: {}", ini_file); - configurator = workrave::config::ConfiguratorFactory::create(workrave::config::ConfigFileFormat::Ini); - configurator->load(ini_file); - } -@@ -174,6 +175,7 @@ Application::init_configurator() - #endif - if (!configFile.empty()) - { -+ spdlog::info("Using XML configuration file: {}", configFile); - configurator->load(configFile); - } - } -@@ -186,6 +188,7 @@ Application::init_configurator() - - if (configurator) - { -+ spdlog::info("Using INI configuration file: {}", ini_file); - configurator->load(ini_file); - configurator->save(); - } -@@ -432,7 +435,11 @@ Application::create_prelude_window(BreakId break_id) - - for (int i = 0; i < toolkit->get_head_count(); i++) - { -- prelude_windows.push_back(toolkit->create_prelude_window(i, break_id)); -+ auto prelude_window = toolkit->create_prelude_window(i, break_id); -+ if (prelude_window) -+ { -+ prelude_windows.push_back(prelude_window); -+ } - } - } - -@@ -479,8 +486,11 @@ Application::create_break_window(BreakId break_id, workrave::utils::Flagscreate_break_window(i, break_id, break_flags); - -- break_windows.push_back(break_window); -- break_window->init(); -+ if (break_window) -+ { -+ break_windows.push_back(break_window); -+ break_window->init(); -+ } - } - } - -diff --git a/ui/app/toolkits/gtkmm/IToolkitPrivate.hh b/ui/app/toolkits/gtkmm/IToolkitPrivate.hh -index abe3e5dbd..15f966514 100644 ---- a/ui/app/toolkits/gtkmm/IToolkitPrivate.hh -+++ b/ui/app/toolkits/gtkmm/IToolkitPrivate.hh -@@ -19,6 +19,7 @@ - #define ITOOLKIT_PRIVATE_HH - - #include -+#include - - #include "HeadInfo.hh" - -@@ -27,7 +28,7 @@ class IToolkitPrivate - public: - virtual ~IToolkitPrivate() = default; - -- virtual HeadInfo get_head_info(int screen_index) const = 0; -+ virtual std::optional get_head_info(int screen_index) const = 0; - virtual void attach_menu(Gtk::Menu *menu) = 0; - }; - -diff --git a/ui/app/toolkits/gtkmm/MainWindow.cc b/ui/app/toolkits/gtkmm/MainWindow.cc -index 74af375b9..96a176664 100644 ---- a/ui/app/toolkits/gtkmm/MainWindow.cc -+++ b/ui/app/toolkits/gtkmm/MainWindow.cc -@@ -351,7 +351,12 @@ MainWindow::convert_display_to_monitor(int &x, int &y) - - for (int i = 0; i < app->get_toolkit()->get_head_count(); i++) - { -- HeadInfo head = toolkit_priv->get_head_info(i); -+ auto optional_head = toolkit_priv->get_head_info(i); -+ if (!optional_head) -+ { -+ continue; -+ } -+ HeadInfo head = *optional_head; - - int left = head.get_x(); - int top = head.get_y(); -@@ -383,7 +388,12 @@ void - MainWindow::convert_monitor_to_display(int &x, int &y, int head) - { - auto toolkit_priv = std::dynamic_pointer_cast(app->get_toolkit()); -- HeadInfo h = toolkit_priv->get_head_info(head); -+ auto optional_head = toolkit_priv->get_head_info(head); -+ if (!optional_head) -+ { -+ return; -+ } -+ HeadInfo h = *optional_head; - - if (x < 0) - { -diff --git a/ui/app/toolkits/gtkmm/Toolkit.cc b/ui/app/toolkits/gtkmm/Toolkit.cc -index 76c456780..8fccf86b6 100644 ---- a/ui/app/toolkits/gtkmm/Toolkit.cc -+++ b/ui/app/toolkits/gtkmm/Toolkit.cc -@@ -145,11 +145,22 @@ Toolkit::run() - gapp->run(); - } - --HeadInfo -+std::optional - Toolkit::get_head_info(int screen_index) const - { - Glib::RefPtr display = Gdk::Display::get_default(); -+ if (!display) -+ { -+ logger->error("Failed to get default display"); -+ return {}; -+ } -+ - Glib::RefPtr monitor = display->get_monitor(screen_index); -+ if (!monitor) -+ { -+ logger->error("Failed to get monitor for screen index {}", screen_index); -+ return {}; -+ } - - HeadInfo head; - head.primary = monitor->is_primary(); -@@ -178,7 +189,13 @@ Toolkit::create_break_window(int screen_index, BreakId break_id, BreakFlags brea - { - IBreakWindow::Ptr ret; - -- HeadInfo head = get_head_info(screen_index); -+ auto optional_head = get_head_info(screen_index); -+ if (!optional_head) -+ { -+ logger->error("Failed to retrieve monitor info for screen index {}", screen_index); -+ return nullptr; -+ } -+ HeadInfo head = *optional_head; - - BlockMode block_mode = GUIConfig::block_mode()(); - -@@ -201,7 +218,13 @@ Toolkit::create_break_window(int screen_index, BreakId break_id, BreakFlags brea - IPreludeWindow::Ptr - Toolkit::create_prelude_window(int screen_index, workrave::BreakId break_id) - { -- HeadInfo head = get_head_info(screen_index); -+ auto optional_head = get_head_info(screen_index); -+ if (!optional_head) -+ { -+ logger->error("Failed to retrieve monitor info for screen index {}", screen_index); -+ return nullptr; -+ } -+ HeadInfo head = *optional_head; - return std::make_shared(head, break_id); - } - -diff --git a/ui/app/toolkits/gtkmm/Toolkit.hh b/ui/app/toolkits/gtkmm/Toolkit.hh -index 159a7815d..d337cd563 100644 ---- a/ui/app/toolkits/gtkmm/Toolkit.hh -+++ b/ui/app/toolkits/gtkmm/Toolkit.hh -@@ -76,7 +76,7 @@ public: - void init(std::shared_ptr app) override; - void deinit() override; - -- HeadInfo get_head_info(int screen_index) const override; -+ std::optional get_head_info(int screen_index) const override; - int get_head_count() const override; - - void terminate() override; -diff --git a/ui/app/toolkits/qt/IToolkitPrivate.hh b/ui/app/toolkits/qt/IToolkitPrivate.hh -index ac1d16974..06b5c03e5 100644 ---- a/ui/app/toolkits/qt/IToolkitPrivate.hh -+++ b/ui/app/toolkits/qt/IToolkitPrivate.hh -@@ -27,7 +27,7 @@ public: - - virtual auto get_desktop_image() -> QPixmap = 0; - -- // virtual HeadInfo get_head_info(int screen_index) const = 0; -+ // virtual std::optional get_head_info(int screen_index) const = 0; - // virtual void attach_menu(Gtk::Menu *menu) = 0; - }; - diff --git a/710.patch b/710.patch new file mode 100644 index 0000000..a31c450 --- /dev/null +++ b/710.patch @@ -0,0 +1,22 @@ +From 7bcdae9a7d5b2dd11decdb3adf23736622b5aab8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C5=81ukasz=20Wojni=C5=82owicz?= + +Date: Sat, 25 Jul 2026 20:51:49 +0200 +Subject: [PATCH] Fix appstream id case + +--- + ui/app/workrave.metainfo.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ui/app/workrave.metainfo.xml b/ui/app/workrave.metainfo.xml +index 794541993..866aaa332 100644 +--- a/ui/app/workrave.metainfo.xml ++++ b/ui/app/workrave.metainfo.xml +@@ -1,6 +1,6 @@ + + +- org.workrave.workrave ++ org.workrave.Workrave + Workrave + Workrave assists in the recovery and prevention of Repetitive Strain Injury (RSI) + CC-BY-3.0 diff --git a/sources b/sources index 987db4e..12d954c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (workrave-v1_11_0_rc_1.tar.gz) = 6538996af3abbbccad3d5b10e88edd1665961d4c5ff393878d2bbc54b78e986676965ed625e1abbfeaf6b8745ef15794679f429f31d3ddce202e0f105c25cbc4 +SHA512 (workrave-v1_11_1.tar.gz) = 45b7e7f84cd5d29945006da524676486c1b87627f6d1ff6e9106e9dd0f4034c26052f23649f312cc1513b17470197b4acea4974744d2a8e1093b31523290f82f diff --git a/workrave.spec b/workrave.spec index 960c8e3..22b21ad 100644 --- a/workrave.spec +++ b/workrave.spec @@ -1,14 +1,16 @@ -%bcond gnome 1 -%bcond gnome40 1 -%bcond gnome45 %[0%{?fedora} || 0%{?rhel} >= 10] -%bcond gnome_flashback %{undefined flatpak} -%bcond mate %{undefined flatpak} -%bcond xfce %{undefined flatpak} +%bcond gnome %[0%{?fedora} || 0%{?rhel} <= 9] +%bcond gnome40 %[0%{?fedora} || 0%{?rhel} <= 9] +%bcond gnome45 %[0%{?fedora} || 0%{?rhel} <= 9] +# Disabled due to missing dependencies. +%bcond cinnamon %[0%{?fedora} || 0%{?rhel} <= 9] +%bcond gnome_flashback %[0%{?fedora} || 0%{?rhel} <= 9] +%bcond mate %[0%{?fedora} || 0%{?rhel} <= 9] +%bcond xfce %[0%{?fedora} || 0%{?rhel} <= 9] %global app_id org.workrave.Workrave Name: workrave -Version: 1.11.0~rc.1 +Version: 1.11.1 Release: %autorelease Summary: Program that assists in the recovery and prevention of RSI # Based on older packages by Dag Wieers and Steve Ratcliffe @@ -20,10 +22,8 @@ License: GPL-3.0-or-later AND GPL-2.0-or-later AND LGPL-2.1-or-later AND H URL: https://workrave.org/ %global tag %(echo %{version} | sed -e 's/[\\.~]/_/g') Source: https://github.com/rcaelers/workrave/archive/v%{tag}/%{name}-v%{tag}.tar.gz -# Fixes nullptr dereference -# https://github.com/rcaelers/workrave/issues/606 -Patch: https://github.com/rcaelers/workrave/commit/1be2073.patch - +Patch: https://github.com/rcaelers/workrave/pull/710.patch + BuildRequires: cmake BuildRequires: desktop-file-utils BuildRequires: gettext @@ -191,9 +191,6 @@ rm -f %{buildroot}%{_libdir}/*.so # indicators need to be enabled to build GIR but are not needed otherwise rm -f %{buildroot}%{_libdir}/*indicators3/7/libworkrave.so* -# fix appstream ID -appstream-util modify %{buildroot}%{_metainfodir}/%{app_id}.metainfo.xml id %{app_id} - # remove zero-length to silence rpmlint rm -f %{buildroot}%{_datadir}/gnome-shell/extensions/workrave@workrave.org/stylesheet.css @@ -202,6 +199,16 @@ rm -f %{buildroot}%{_datadir}/gnome-shell/extensions/workrave@workrave.org/style ln -sf %{_datadir}/workrave/images/workrave-icon-medium.png %{buildroot}%{_datadir}/icons/hicolor/24x24/apps/workrave.png %fdupes %{buildroot}%{_datadir} +%if %{without cinnamon} +# avoid Installed (but unpackaged) file(s) found: +rm -rf %{buildroot}%{_datadir}/cinnamon +%endif + +%if %{without gnome} +# avoid Installed (but unpackaged) file(s) found: +rm -rf %{buildroot}%{_datadir}/gnome-shell +%endif + %check desktop-file-validate %{buildroot}%{_datadir}/applications/%{app_id}.desktop desktop-file-validate %{buildroot}%{_sysconfdir}/xdg/autostart/%{app_id}.desktop @@ -228,8 +235,11 @@ appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/%{app_id}.meta %{_sysconfdir}/xdg/autostart/%{app_id}.desktop %{_metainfodir}/%{app_id}.metainfo.xml +%if %{with cinnamon} %files cinnamon %{_datadir}/cinnamon/applets/workrave@workrave.org/ +%else +%endif %if %{with gnome} %files gnome