From 228db1b2f04a96dd0a2c9e2f635b93b355692bca Mon Sep 17 00:00:00 2001
From: kramo <93832451+kra-mo@users.noreply.github.com>
Date: Sun, 26 Mar 2023 11:03:23 +0200
Subject: [PATCH] Add option to launch games by clicking cover
---
data/gtk/game.blp | 1 -
data/gtk/preferences.blp | 12 ++++++++++-
data/hu.kramo.Cartridges.gschema.xml | 27 ++++++++++++-----------
src/game.py | 32 ++++++++++++++++++++++++++--
src/preferences.py | 22 ++++++++++++-------
src/window.py | 1 -
6 files changed, 70 insertions(+), 25 deletions(-)
diff --git a/data/gtk/game.blp b/data/gtk/game.blp
index e48791f..68f05ae 100644
--- a/data/gtk/game.blp
+++ b/data/gtk/game.blp
@@ -32,7 +32,6 @@ template game : Box {
Box {
Button button_play {
halign: start;
- label: _("Play");
margin-start: 6;
margin-end: 6;
margin-top: 6;
diff --git a/data/gtk/preferences.blp b/data/gtk/preferences.blp
index 94c6b00..f0bb691 100644
--- a/data/gtk/preferences.blp
+++ b/data/gtk/preferences.blp
@@ -3,7 +3,7 @@ using Adw 1;
template PreferencesWindow : Adw.PreferencesWindow {
search-enabled: false;
- default-height: 500;
+ default-height: 550;
Adw.PreferencesPage page {
Adw.PreferencesGroup general_group {
@@ -16,6 +16,16 @@ template PreferencesWindow : Adw.PreferencesWindow {
valign: center;
}
}
+
+ Adw.ActionRow {
+ title: _("Cover Image Launches Game");
+ subtitle: _("Swaps the behavior of the cover image and the play button");
+
+ Switch cover_launches_game_switch {
+ valign: center;
+ }
+ }
+
Adw.ActionRow {
title: _("High Quality Images");
subtitle: _("Save game covers losslessly at the cost of storage");
diff --git a/data/hu.kramo.Cartridges.gschema.xml b/data/hu.kramo.Cartridges.gschema.xml
index 06ae1aa..dc2708e 100644
--- a/data/hu.kramo.Cartridges.gschema.xml
+++ b/data/hu.kramo.Cartridges.gschema.xml
@@ -4,6 +4,21 @@
false
+
+ false
+
+
+ false
+
+
+ "~/.steam/"
+
+
+ []
+
+
+ "~/.var/app/com.heroicgameslauncher.hgl/config/heroic/"
+
true
@@ -13,20 +28,8 @@
true
-
- "~/.steam/"
-
-
- []
-
-
- "~/.var/app/com.heroicgameslauncher.hgl/config/heroic/"
-
"~/.var/app/com.usebottles.bottles/data/bottles/"
-
-
- false
diff --git a/src/game.py b/src/game.py
index 9cd2995..d0e8fff 100644
--- a/src/game.py
+++ b/src/game.py
@@ -66,10 +66,16 @@ class game(Gtk.Box): # pylint: disable=invalid-name
self.add_controller(self.event_contoller_motion)
self.overlay.set_measure_overlay(self.play_revealer, True)
- self.button_play.connect("clicked", self.launch_game)
+ self.set_play_label()
+
+ self.cover_button.connect("clicked", self.cover_button_clicked)
+ self.button_play.connect("clicked", self.button_play_clicked)
+
self.event_contoller_motion.connect("enter", self.show_play)
self.event_contoller_motion.connect("leave", self.hide_play)
+ self.parent_widget.schema.connect("changed", self.schema_changed)
+
if self.hidden:
self.menu_button.set_menu_model(self.hidden_game_options)
else:
@@ -146,6 +152,28 @@ class game(Gtk.Box): # pylint: disable=invalid-name
self.play_revealer.set_reveal_child(False)
self.title_revealer.set_reveal_child(True)
- def launch_game(self, _widget):
+ def launch_game(self, _widget, *_unused):
self.parent_widget.set_active_game(None, None, self.game_id)
self.parent_widget.get_application().on_launch_game_action(None)
+
+ def cover_button_clicked(self, _widget):
+ if self.parent_widget.schema.get_boolean("cover-launches-game"):
+ self.launch_game(None)
+ else:
+ self.parent_widget.show_overview(None, self.game_id)
+
+ def button_play_clicked(self, _widget):
+ if self.parent_widget.schema.get_boolean("cover-launches-game"):
+ self.parent_widget.show_overview(None, self.game_id)
+ else:
+ self.launch_game(None)
+
+ def set_play_label(self):
+ if self.parent_widget.schema.get_boolean("cover-launches-game"):
+ self.button_play.set_label(_("Details"))
+ else:
+ self.button_play.set_label(_("Play"))
+
+ def schema_changed(self, _settings, key):
+ if key == "cover-launches-game":
+ self.set_play_label()
diff --git a/src/preferences.py b/src/preferences.py
index 71b20ad..b4a655d 100644
--- a/src/preferences.py
+++ b/src/preferences.py
@@ -29,6 +29,8 @@ class PreferencesWindow(Adw.PreferencesWindow):
page = Gtk.Template.Child()
exit_after_launch_switch = Gtk.Template.Child()
+ cover_launches_game_switch = Gtk.Template.Child()
+ high_quality_images_switch = Gtk.Template.Child()
steam_file_chooser_button = Gtk.Template.Child()
steam_extra_file_chooser_button = Gtk.Template.Child()
@@ -43,8 +45,6 @@ class PreferencesWindow(Adw.PreferencesWindow):
bottles_group = Gtk.Template.Child()
bottles_file_chooser_button = Gtk.Template.Child()
- high_quality_images_switch = Gtk.Template.Child()
-
def __init__(self, parent_widget, **kwargs):
super().__init__(**kwargs)
@@ -56,6 +56,18 @@ class PreferencesWindow(Adw.PreferencesWindow):
"active",
Gio.SettingsBindFlags.DEFAULT,
)
+ schema.bind(
+ "cover-launches-game",
+ self.cover_launches_game_switch,
+ "active",
+ Gio.SettingsBindFlags.DEFAULT,
+ )
+ schema.bind(
+ "high-quality-images",
+ self.high_quality_images_switch,
+ "active",
+ Gio.SettingsBindFlags.DEFAULT,
+ )
schema.bind(
"heroic-import-epic",
self.heroic_epic_switch,
@@ -74,12 +86,6 @@ class PreferencesWindow(Adw.PreferencesWindow):
"active",
Gio.SettingsBindFlags.DEFAULT,
)
- schema.bind(
- "high-quality-images",
- self.high_quality_images_switch,
- "active",
- Gio.SettingsBindFlags.DEFAULT,
- )
filechooser = Gtk.FileDialog()
diff --git a/src/window.py b/src/window.py
index 5f2b6d7..986f183 100644
--- a/src/window.py
+++ b/src/window.py
@@ -153,7 +153,6 @@ class CartridgesWindow(Adw.ApplicationWindow):
self.hidden_widgets[game_id] = entry
self.hidden_library.append(entry)
- entry.cover_button.connect("clicked", self.show_overview, game_id)
entry.menu_button.get_popover().connect(
"notify::visible", self.set_active_game, game_id
)