diff --git a/0001-Make-sure-Paths.bottles-exists.patch b/0001-Make-sure-Paths.bottles-exists.patch index 1507b65..2dd5612 100644 --- a/0001-Make-sure-Paths.bottles-exists.patch +++ b/0001-Make-sure-Paths.bottles-exists.patch @@ -1,4 +1,4 @@ -From f43e05d590e21634e05b5ff836c874237eddede1 Mon Sep 17 00:00:00 2001 +From 7e820512cffc4f709a2d00e341306f57d91ddda5 Mon Sep 17 00:00:00 2001 From: Sandro Date: Mon, 4 Mar 2024 20:28:49 +0100 Subject: [PATCH 1/3] Make sure Paths.bottles exists @@ -13,10 +13,10 @@ It seems check_app_dirs() is never called in that situation. 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bottles/backend/managers/manager.py b/bottles/backend/managers/manager.py -index 8b04c30e..970df26d 100644 +index 5569b663..799ce8c3 100644 --- a/bottles/backend/managers/manager.py +++ b/bottles/backend/managers/manager.py -@@ -813,7 +813,11 @@ class Manager(metaclass=Singleton): +@@ -888,7 +888,11 @@ class Manager(metaclass=Singleton): Check for local bottles and update the local_bottles list. Will also mark the broken ones if the configuration file is missing """ @@ -30,5 +30,5 @@ index 8b04c30e..970df26d 100644 # Empty local bottles self.local_bottles = {} -- -2.47.0 +2.51.0 diff --git a/0002-Catch-AttributeError-in-set_manager.patch b/0002-Catch-AttributeError-in-set_manager.patch index 34537a0..960b3c7 100644 --- a/0002-Catch-AttributeError-in-set_manager.patch +++ b/0002-Catch-AttributeError-in-set_manager.patch @@ -1,4 +1,4 @@ -From 202a3cd999e8685549aee4b9c206bdcfa003c82a Mon Sep 17 00:00:00 2001 +From 602f3b45095fc63728850ba1d636ac52e4a6f156 Mon Sep 17 00:00:00 2001 From: Sandro Date: Mon, 4 Mar 2024 21:45:51 +0100 Subject: [PATCH 2/3] Catch AttributeError in set_manager() @@ -9,10 +9,10 @@ Return empty list if AttributeError is raised. 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bottles/frontend/windows/window.py b/bottles/frontend/windows/window.py -index bddd3f34..c5cf2b37 100644 +index 26d90728..ce76ab42 100644 --- a/bottles/frontend/windows/window.py +++ b/bottles/frontend/windows/window.py -@@ -213,9 +213,12 @@ class BottlesWindow(Adw.ApplicationWindow): +@@ -262,9 +262,12 @@ class BottlesWindow(Adw.ApplicationWindow): def set_manager(result: Manager, error=None): self.manager = result @@ -29,5 +29,5 @@ index bddd3f34..c5cf2b37 100644 self.show_onboard_view() -- -2.47.0 +2.51.0 diff --git a/0003-Catch-AttributeError-when-window-is-closed.patch b/0003-Catch-AttributeError-when-window-is-closed.patch index 2777d9e..eaff8a1 100644 --- a/0003-Catch-AttributeError-when-window-is-closed.patch +++ b/0003-Catch-AttributeError-when-window-is-closed.patch @@ -1,4 +1,4 @@ -From e2ce1892c557f1f81ba5883eee1d19a120abb2c2 Mon Sep 17 00:00:00 2001 +From 3001aaba2b1ea6488b69f8714171eff635043b53 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sat, 9 Nov 2024 13:42:00 +0100 Subject: [PATCH 3/3] Catch AttributeError when window is closed @@ -29,5 +29,5 @@ index f6a07b15..ea3d7ad1 100644 @staticmethod -- -2.47.0 +2.51.0 diff --git a/1001-Revert-meson-Add-check-for-Flatpak.patch b/1001-Revert-meson-Add-check-for-Flatpak.patch index 7f1eb50..e871f2d 100644 --- a/1001-Revert-meson-Add-check-for-Flatpak.patch +++ b/1001-Revert-meson-Add-check-for-Flatpak.patch @@ -1,4 +1,4 @@ -From 387213dd5c1179f1dbf8352ac389cbf8323a0d6f Mon Sep 17 00:00:00 2001 +From 43278894bd9f1277da14ac187ba7b42ece5cf483 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sun, 8 Dec 2024 11:11:27 +0100 Subject: [PATCH 1001/1005] Revert "meson: Add check for Flatpak" @@ -29,5 +29,5 @@ index 6ff7c011..c26ea0b9 100644 '__init__.py', 'main.py', -- -2.49.0 +2.51.0 diff --git a/1002-Change-issue-URL-to-Bugzilla.patch b/1002-Change-issue-URL-to-Bugzilla.patch index 9806185..1ee76f0 100644 --- a/1002-Change-issue-URL-to-Bugzilla.patch +++ b/1002-Change-issue-URL-to-Bugzilla.patch @@ -1,4 +1,4 @@ -From bd5ebc6dc6ae529c933ae2655b27f9ee04a1dc44 Mon Sep 17 00:00:00 2001 +From 6daaf8a10f2678f1325546992aa27552f0407c1e Mon Sep 17 00:00:00 2001 From: Sandro Date: Sun, 8 Dec 2024 11:22:42 +0100 Subject: [PATCH 1002/1005] Change issue URL to Bugzilla @@ -10,7 +10,7 @@ users, direct them to Bugzilla instead. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/com.usebottles.bottles.metainfo.xml.in.in b/data/com.usebottles.bottles.metainfo.xml.in.in -index 52f33b91..d4c1e49d 100644 +index c380c823..fd2261d9 100644 --- a/data/com.usebottles.bottles.metainfo.xml.in.in +++ b/data/com.usebottles.bottles.metainfo.xml.in.in @@ -70,7 +70,7 @@ @@ -23,5 +23,5 @@ index 52f33b91..d4c1e49d 100644 https://usebottles.com/funding https://hosted.weblate.org/engage/bottles -- -2.49.0 +2.51.0 diff --git a/1003-Display-warning-regarding-issue-tracker.patch b/1003-Display-warning-regarding-issue-tracker.patch index eb29c08..13451be 100644 --- a/1003-Display-warning-regarding-issue-tracker.patch +++ b/1003-Display-warning-regarding-issue-tracker.patch @@ -1,4 +1,4 @@ -From 946114f3aba1913d4cd9c9498a35cee2da1d0cf0 Mon Sep 17 00:00:00 2001 +From 96e3ec53fe9819cf23bc8369e397d12ef1f06b51 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sun, 8 Dec 2024 12:21:57 +0100 Subject: [PATCH 1003/1005] Display warning regarding issue tracker @@ -10,10 +10,10 @@ Bottles. Revert upstream's outright denial of usage. 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/bottles/frontend/windows/window.py b/bottles/frontend/windows/window.py -index 802b08b5..d31d0cf7 100644 +index ce76ab42..05c20092 100644 --- a/bottles/frontend/windows/window.py +++ b/bottles/frontend/windows/window.py -@@ -102,29 +102,26 @@ class BottlesWindow(Adw.ApplicationWindow): +@@ -116,29 +116,26 @@ class BottlesWindow(Adw.ApplicationWindow): def response(dialog, response, *args): if response == "close": @@ -22,7 +22,7 @@ index 802b08b5..d31d0cf7 100644 body = _( - "Bottles is only supported within a sandboxed environment. Official sources of Bottles are available at" -+ "Bottles developers (upstream) only support Flatpak. Please report any issues with the RPM package in" ++ "Bottles developers (upstream) only support Flatpak. Please report any issues with the RPM package in" ) - download_url = "usebottles.com/download" + bug_url = "bugz.fedoraproject.org/bottles" @@ -54,5 +54,5 @@ index 802b08b5..d31d0cf7 100644 # Loading view self.page_loading = LoadingView() -- -2.49.0 +2.51.0 diff --git a/1004-Do-not-require-Xdp.patch b/1004-Do-not-require-Xdp.patch index 806637c..e0edd1f 100644 --- a/1004-Do-not-require-Xdp.patch +++ b/1004-Do-not-require-Xdp.patch @@ -1,33 +1,40 @@ -From e1c62b61b00b89d0ce39c68cf62556fa38ddc1a3 Mon Sep 17 00:00:00 2001 +From fc49b2eecc0526ac58c029a011b3fb90383f98c7 Mon Sep 17 00:00:00 2001 From: Sandro Date: Wed, 8 Jan 2025 09:44:32 +0100 Subject: [PATCH 1004/1005] Do not require Xdp This is used for Flatpak introspection. No need to depend on Xdp in the RPM package. We will never run in a sandboxed environment. + +Upstream uses this for checking that Bottles is running inside a Flatpak +sandbox with `running_under_sandbox`. This patch removes the check, +allowing us to drop the dependency on Xdp. + +Unfortunately, we will have to review this with every release. --- - bottles/frontend/main.py | 1 - - bottles/frontend/views/bottle_details.py | 16 +------- - bottles/frontend/views/bottle_preferences.py | 4 +- - bottles/frontend/views/list.py | 5 +-- - bottles/frontend/views/new_bottle_dialog.py | 4 +- - bottles/frontend/windows/window.py | 42 ++++++++++---------- - 6 files changed, 27 insertions(+), 45 deletions(-) + bottles/frontend/main.py | 2 -- + bottles/frontend/views/bottle_details.py | 17 ++---------- + bottles/frontend/views/bottle_preferences.py | 5 +--- + bottles/frontend/views/list.py | 5 +--- + bottles/frontend/views/new_bottle_dialog.py | 4 +-- + bottles/frontend/windows/window.py | 28 +------------------- + 6 files changed, 7 insertions(+), 54 deletions(-) diff --git a/bottles/frontend/main.py b/bottles/frontend/main.py -index f6a07b15..5bbf548c 100644 +index ea3d7ad1..5a8ecd20 100644 --- a/bottles/frontend/main.py +++ b/bottles/frontend/main.py -@@ -34,7 +34,6 @@ from bottles.frontend.params import ( +@@ -34,8 +34,6 @@ from bottles.frontend.params import ( gi.require_version("Gtk", "4.0") gi.require_version("Adw", "1") gi.require_version("GtkSource", "5") -gi.require_version("Xdp", "1.0") - # gi.require_version("XdpGtk4", "1.0") +-# gi.require_version("XdpGtk4", "1.0") # ruff: noqa: E402 + from gi.repository import Gio, GLib, GObject, Adw # type: ignore diff --git a/bottles/frontend/views/bottle_details.py b/bottles/frontend/views/bottle_details.py -index 65667ea9..ebf7079a 100644 +index 65667ea9..b4f151ea 100644 --- a/bottles/frontend/views/bottle_details.py +++ b/bottles/frontend/views/bottle_details.py @@ -21,7 +21,7 @@ from datetime import datetime @@ -39,10 +46,11 @@ index 65667ea9..ebf7079a 100644 from bottles.backend.managers.backup import BackupManager from bottles.backend.models.config import BottleConfig -@@ -437,19 +437,7 @@ class BottleView(Adw.PreferencesPage): +@@ -436,20 +436,7 @@ class BottleView(Adw.PreferencesPage): + dialog.connect("response", execute) dialog.show() - if Xdp.Portal.running_under_sandbox(): +- if Xdp.Portal.running_under_sandbox(): - if self.window.settings.get_boolean("show-sandbox-warning"): - dialog = Adw.MessageDialog.new( - self.window, @@ -56,12 +64,12 @@ index 65667ea9..ebf7079a 100644 - dialog.present() - else: - show_chooser() -+ show_chooser() ++ show_chooser() def __backup(self, widget, backup_type): """ diff --git a/bottles/frontend/views/bottle_preferences.py b/bottles/frontend/views/bottle_preferences.py -index 288e693b..4e989fb2 100644 +index 0d450f29..eb67714a 100644 --- a/bottles/frontend/views/bottle_preferences.py +++ b/bottles/frontend/views/bottle_preferences.py @@ -20,7 +20,7 @@ import os @@ -73,15 +81,16 @@ index 288e693b..4e989fb2 100644 from bottles.backend.globals import ( gamemode_available, -@@ -139,7 +139,7 @@ class PreferencesView(Adw.PreferencesPage): +@@ -139,9 +139,6 @@ class PreferencesView(Adw.PreferencesPage): self.queue = details.queue self.details = details - if not gamemode_available or not Xdp.Portal.running_under_sandbox(): -+ if not gamemode_available: - return - +- return +- _not_available = _("This feature is unavailable on your system.") + _flatpak_not_available = _( + "{} To add this feature, please run flatpak install" diff --git a/bottles/frontend/views/list.py b/bottles/frontend/views/list.py index 43ab9c22..a8f6c587 100644 --- a/bottles/frontend/views/list.py @@ -106,19 +115,19 @@ index 43ab9c22..a8f6c587 100644 if response != Gtk.ResponseType.ACCEPT: return diff --git a/bottles/frontend/views/new_bottle_dialog.py b/bottles/frontend/views/new_bottle_dialog.py -index a8b007d4..81fa102e 100644 +index 6774b10b..a34957eb 100644 --- a/bottles/frontend/views/new_bottle_dialog.py +++ b/bottles/frontend/views/new_bottle_dialog.py -@@ -17,7 +17,7 @@ - - from gettext import gettext as _ +@@ -21,7 +21,7 @@ from threading import Event from typing import Any, Optional + + from bottles.backend.state import Task, TaskManager -from gi.repository import Gtk, Adw, Pango, Gio, Xdp, GObject, GLib +from gi.repository import Gtk, Adw, Pango, Gio, GObject, GLib from bottles.backend.models.config import BottleConfig from bottles.backend.utils.threading import RunAsync -@@ -80,7 +80,7 @@ class BottlesNewBottleDialog(Adw.Dialog): +@@ -86,7 +86,7 @@ class BottlesNewBottleDialog(Adw.Dialog): super().__init__(**kwargs) # common variables and references self.window = GtkUtils.get_parent_window() @@ -128,7 +137,7 @@ index a8b007d4..81fa102e 100644 self.app = self.window.get_application() diff --git a/bottles/frontend/windows/window.py b/bottles/frontend/windows/window.py -index d31d0cf7..c8adde1c 100644 +index 05c20092..f9625016 100644 --- a/bottles/frontend/windows/window.py +++ b/bottles/frontend/windows/window.py @@ -21,7 +21,7 @@ import webbrowser @@ -140,37 +149,27 @@ index d31d0cf7..c8adde1c 100644 from bottles.backend.globals import Paths from bottles.backend.health import HealthChecker -@@ -98,30 +98,28 @@ class BottlesWindow(Adw.ApplicationWindow): +@@ -111,32 +111,6 @@ class BottlesWindow(Adw.ApplicationWindow): + manager = Adw.StyleManager.get_default() manager.set_color_scheme(Adw.ColorScheme.FORCE_DARK) - # Be VERY explicit that non-sandboxed environments are unsupported +- # Be VERY explicit that non-sandboxed environments are unsupported - if not Xdp.Portal.running_under_sandbox(): -+ def response(dialog, response, *args): -+ if response == "close": -+ return - +- - def response(dialog, response, *args): - if response == "close": - return - - body = _( -- "Bottles developers (upstream) only support Flatpak. Please report any issues with the RPM package in" +- "Bottles developers (upstream) only support Flatpak. Please report any issues with the RPM package in" - ) - bug_url = "bugz.fedoraproject.org/bottles" -+ body = _( -+ "Bottles developers (upstream) only support Flatpak. Please report any issues with the RPM package in" -+ ) -+ bug_url = "bugz.fedoraproject.org/bottles" - +- - error_dialog = Adw.AlertDialog.new( - _("RPM Package Note"), - f"{body} Bugzilla." - ) -+ error_dialog = Adw.AlertDialog.new( -+ _("RPM Package Note"), -+ f"{body} Bugzilla." -+ ) - +- - error_dialog.add_response("close", _("Understood")) - error_dialog.set_body_use_markup(True) - error_dialog.connect("response", response) @@ -179,17 +178,10 @@ index d31d0cf7..c8adde1c 100644 - logging.warn("https://usebottles.com/download/") - logging.warn(_("Please report any issues using the RPM package to:")) - logging.warn("https://bugz.fedoraproject.org/bottles") -+ error_dialog.add_response("close", _("Understood")) -+ error_dialog.set_body_use_markup(True) -+ error_dialog.connect("response", response) -+ error_dialog.present(self) -+ logging.warn(_("Bottles is only supported within a sandboxed environment. Official sources of Bottles are available at:")) -+ logging.warn("https://usebottles.com/download/") -+ logging.warn(_("Please report any issues using the RPM package to:")) -+ logging.warn("https://bugz.fedoraproject.org/bottles") - +- # Loading view self.page_loading = LoadingView() + -- -2.49.0 +2.51.0 diff --git a/1005-Revert-bottle-row-Port-to-AdwWrapBox.patch b/1005-Revert-bottle-row-Port-to-AdwWrapBox.patch deleted file mode 100644 index 00e97f8..0000000 --- a/1005-Revert-bottle-row-Port-to-AdwWrapBox.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 4c4f5f2274bfe174e82d7c68627fb6c95b04fd8b Mon Sep 17 00:00:00 2001 -From: Sandro -Date: Wed, 15 Jan 2025 20:59:47 +0100 -Subject: [PATCH 1005/1005] Revert "bottle-row: Port to AdwWrapBox" - -AdwWrapBox is still deemed unstable and only available since 1.7. - -This reverts commit eb81c0306ef20aa5e4c0104a0a6d55779996b027. ---- - bottles/frontend/ui/bottle-row.blp | 16 ++++++++++------ - bottles/frontend/views/list.py | 6 +++--- - 2 files changed, 13 insertions(+), 9 deletions(-) - -diff --git a/bottles/frontend/ui/bottle-row.blp b/bottles/frontend/ui/bottle-row.blp -index 163900ea..2598ed52 100644 ---- a/bottles/frontend/ui/bottle-row.blp -+++ b/bottles/frontend/ui/bottle-row.blp -@@ -5,13 +5,17 @@ template $BottlesBottleRow: Adw.ActionRow { - activatable: true; - use-markup: false; - -- Adw.WrapBox wrap_box { -- valign: center; -+ Box { -+ spacing: 6; - -- styles [ -- "tag", -- "caption", -- ] -+ Label label_env { -+ valign: center; -+ -+ styles [ -+ "tag", -+ "caption", -+ ] -+ } - } - - Button button_run { -diff --git a/bottles/frontend/views/list.py b/bottles/frontend/views/list.py -index a8f6c587..91a52e2b 100644 ---- a/bottles/frontend/views/list.py -+++ b/bottles/frontend/views/list.py -@@ -37,7 +37,7 @@ class BottlesBottleRow(Adw.ActionRow): - - # region Widgets - button_run = Gtk.Template.Child() -- wrap_box = Gtk.Template.Child() -+ label_env = Gtk.Template.Child() - - # endregion - -@@ -74,8 +74,8 @@ class BottlesBottleRow(Adw.ActionRow): - self.set_title(self.config.Name) - if self.window.settings.get_boolean("update-date"): - self.set_subtitle(update_date) -- -- self.wrap_box.append(Gtk.Label.new(self.config.Environment)) -+ self.label_env.set_text(_(self.config.Environment)) -+ self.label_env.add_css_class("tag-%s" % self.config.Environment.lower()) - - # Set tooltip text - self.button_run.set_tooltip_text(_(f"Run executable in “{self.config.Name}”")) --- -2.49.0 - diff --git a/1005-Search-for-system-installed-vkBasalt.patch b/1005-Search-for-system-installed-vkBasalt.patch new file mode 100644 index 0000000..2eea87f --- /dev/null +++ b/1005-Search-for-system-installed-vkBasalt.patch @@ -0,0 +1,30 @@ +From 9874f7e6d9289c1dd398c26eb9f8c585412aacff Mon Sep 17 00:00:00 2001 +From: Sandro +Date: Sat, 8 Nov 2025 12:06:54 +0100 +Subject: [PATCH 1005/1005] Search for system installed vkBasalt + +Also look in /usr/local in case a local install is present. +--- + bottles/backend/globals.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/bottles/backend/globals.py b/bottles/backend/globals.py +index 488acea3..d6a6a466 100644 +--- a/bottles/backend/globals.py ++++ b/bottles/backend/globals.py +@@ -52,9 +52,9 @@ class Paths: + @staticmethod + def is_vkbasalt_available(): + vkbasalt_paths = [ +- "/usr/lib/extensions/vulkan/vkBasalt/etc/vkBasalt", +- "/usr/local", +- "/usr/share/vkBasalt", ++ "/usr/lib64/vkbasalt/libvkbasalt.so", ++ "/usr/local/lib64/libvkbasalt.so", ++ "/usr/local/lib64/vkbasalt/libvkbasalt.so", + ] + for path in vkbasalt_paths: + if os.path.exists(path): +-- +2.51.0 + diff --git a/README.packit b/README.packit index f5cc99f..2511bf4 100644 --- a/README.packit +++ b/README.packit @@ -1,3 +1,3 @@ This repository is maintained by packit. https://packit.dev/ -The file was generated using packit 1.2.0.post1.dev13+g55ed4527. +The file was generated using packit 1.12.0. diff --git a/bottles.spec b/bottles.spec index f5edbfb..5973e13 100644 --- a/bottles.spec +++ b/bottles.spec @@ -1,6 +1,6 @@ Name: bottles -Epoch: 1 -Version: 51.21 +Epoch: 2 +Version: 52.0 Release: %autorelease Summary: Run Windows in a Bottle @@ -29,14 +29,13 @@ Patch: 1001-Revert-meson-Add-check-for-Flatpak.patch Patch: 1002-Change-issue-URL-to-Bugzilla.patch Patch: 1003-Display-warning-regarding-issue-tracker.patch Patch: 1004-Do-not-require-Xdp.patch -Patch: 1005-Revert-bottle-row-Port-to-AdwWrapBox.patch BuildArch: noarch BuildRequires: desktop-file-utils BuildRequires: libappstream-glib BuildRequires: meson -BuildRequires: python3 +BuildRequires: python3-devel BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gtk4) BuildRequires: pkgconfig(libadwaita-1) >= 1.1.99 @@ -92,6 +91,18 @@ Recommends: mesa-vulkan-drivers.i686 Recommends: SDL2.i686 Recommends: vulkan-loader.i686 +# Optional dependencies that will provide extra features in Bottles +# when installed. +Recommends: gamemode +Recommends: gamescope +Recommends: mangohud +# Since this pulls in OBS Studio and is not generally required for gaming +# setups, we only suggest. +Suggests: obs-studio-plugin-vkcapture +Recommends: vkBasalt +Recommends: vmtouch + + %description Bottles lets you run Windows software on Linux, such as applications and games. It introduces a workflow that helps you organize by diff --git a/sources b/sources index cd90561..3837af0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (Bottles-51.21.tar.gz) = cfeea2b3ce46305638d2ad7b0778b8a821793e476fc220040469da51b6454547a5189de93d05c7c0bf1d4ec58fabd8a491ab75dd226510e50637ad00c170414a +SHA512 (Bottles-52.0.tar.gz) = d133cf07a224c7f1848786f7b6f90e9e834fec7e855e5c48b4413657a7566f148f8ceece958a2cce575ae5ba66dea0963c19a79a893900b88c0c6af6c8bb1c41