Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5306b7c81c | ||
|
|
c5675efa48 | ||
|
|
83399c7882 | ||
|
|
04900c7acf | ||
|
|
3ae6b40773 | ||
|
|
4a5ebb3221 | ||
|
|
778caead01 | ||
|
|
2b7f520f2a | ||
|
|
c80f5271da | ||
|
|
f7cf7c4a3b | ||
|
|
c4aa903752 | ||
|
|
35d85a607f | ||
|
|
b086766b77 | ||
|
|
303f2a2063 | ||
|
|
3e1ef88a1f |
62
.github/workflows/ci.yml
vendored
62
.github/workflows/ci.yml
vendored
@@ -22,39 +22,39 @@ jobs:
|
|||||||
bundle: hu.kramo.Cartridges.Devel.flatpak
|
bundle: hu.kramo.Cartridges.Devel.flatpak
|
||||||
manifest-path: flatpak/hu.kramo.Cartridges.Devel.json
|
manifest-path: flatpak/hu.kramo.Cartridges.Devel.json
|
||||||
|
|
||||||
windows:
|
# windows:
|
||||||
name: Windows
|
# name: Windows
|
||||||
runs-on: windows-latest
|
# runs-on: windows-latest
|
||||||
steps:
|
# steps:
|
||||||
- name: Checkout
|
# - name: Checkout
|
||||||
uses: actions/checkout@v4
|
# uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup MSYS2
|
# - name: Setup MSYS2
|
||||||
uses: msys2/setup-msys2@v2
|
# uses: msys2/setup-msys2@v2
|
||||||
with:
|
# with:
|
||||||
msystem: UCRT64
|
# msystem: UCRT64
|
||||||
update: true
|
# update: true
|
||||||
install: mingw-w64-ucrt-x86_64-gtk4 mingw-w64-ucrt-x86_64-libadwaita mingw-w64-ucrt-x86_64-python-gobject mingw-w64-ucrt-x86_64-python-yaml mingw-w64-ucrt-x86_64-python-requests mingw-w64-ucrt-x86_64-python-pillow mingw-w64-ucrt-x86_64-desktop-file-utils mingw-w64-ucrt-x86_64-ca-certificates mingw-w64-ucrt-x86_64-meson git
|
# install: mingw-w64-ucrt-x86_64-gtk4 mingw-w64-ucrt-x86_64-libadwaita mingw-w64-ucrt-x86_64-python-gobject mingw-w64-ucrt-x86_64-python-yaml mingw-w64-ucrt-x86_64-python-requests mingw-w64-ucrt-x86_64-python-pillow mingw-w64-ucrt-x86_64-desktop-file-utils mingw-w64-ucrt-x86_64-ca-certificates mingw-w64-ucrt-x86_64-meson git
|
||||||
|
|
||||||
- name: Compile
|
# - name: Compile
|
||||||
shell: msys2 {0}
|
# shell: msys2 {0}
|
||||||
run: |
|
# run: |
|
||||||
meson setup _build
|
# meson setup _build
|
||||||
ninja -C _build install
|
# ninja -C _build install
|
||||||
pacman --noconfirm -Rs mingw-w64-ucrt-x86_64-desktop-file-utils mingw-w64-ucrt-x86_64-meson git
|
# pacman --noconfirm -Rs mingw-w64-ucrt-x86_64-desktop-file-utils mingw-w64-ucrt-x86_64-meson git
|
||||||
find /ucrt64/share/locale/ -type f ! -name "*cartridges.mo" -delete
|
# find /ucrt64/share/locale/ -type f ! -name "*cartridges.mo" -delete
|
||||||
|
|
||||||
- name: Test
|
# - name: Test
|
||||||
shell: msys2 {0}
|
# shell: msys2 {0}
|
||||||
run: |
|
# run: |
|
||||||
set +e
|
# set +e
|
||||||
timeout 2 cartridges; [ "$?" -eq "124" ]
|
# timeout 2 cartridges; [ "$?" -eq "124" ]
|
||||||
|
|
||||||
- name: Inno Setup
|
# - name: Inno Setup
|
||||||
run: iscc ".\_build\windows\Cartridges.iss"
|
# run: iscc ".\_build\windows\Cartridges.iss"
|
||||||
|
|
||||||
- name: Upload Artifact
|
# - name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v3
|
# uses: actions/upload-artifact@v3
|
||||||
with:
|
# with:
|
||||||
name: Windows Installer
|
# name: Windows Installer
|
||||||
path: _build/windows/Output/Cartridges Setup.exe
|
# path: _build/windows/Output/Cartridges Setup.exe
|
||||||
|
|||||||
6
.github/workflows/publish-release.yml
vendored
6
.github/workflows/publish-release.yml
vendored
@@ -39,7 +39,7 @@ jobs:
|
|||||||
- name: Publish release
|
- name: Publish release
|
||||||
uses: softprops/action-gh-release@v0.1.15
|
uses: softprops/action-gh-release@v0.1.15
|
||||||
with:
|
with:
|
||||||
files: Windows Installer/Cartridges Setup.exe
|
# files: Windows Installer/Cartridges Setup.exe
|
||||||
fail_on_unmatched_files: true
|
# fail_on_unmatched_files: true
|
||||||
tag_name: ${{ steps.get_tag_name.outputs.tag_name }}
|
tag_name: ${{ steps.get_tag_name.outputs.tag_name }}
|
||||||
body_path: release_notes
|
body_path: release_notes
|
||||||
|
|||||||
@@ -36,9 +36,9 @@ from cartridges.utils.create_dialog import create_dialog
|
|||||||
from cartridges.utils.save_cover import convert_cover, save_cover
|
from cartridges.utils.save_cover import convert_cover, save_cover
|
||||||
|
|
||||||
|
|
||||||
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/details-window.ui")
|
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/details-dialog.ui")
|
||||||
class DetailsWindow(Adw.Window):
|
class DetailsDialog(Adw.Dialog):
|
||||||
__gtype_name__ = "DetailsWindow"
|
__gtype_name__ = "DetailsDialog"
|
||||||
|
|
||||||
cover_overlay = Gtk.Template.Child()
|
cover_overlay = Gtk.Template.Child()
|
||||||
cover = Gtk.Template.Child()
|
cover = Gtk.Template.Child()
|
||||||
@@ -61,12 +61,9 @@ class DetailsWindow(Adw.Window):
|
|||||||
|
|
||||||
def __init__(self, game: Optional[Game] = None, **kwargs: Any):
|
def __init__(self, game: Optional[Game] = None, **kwargs: Any):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
self.game: Game = game
|
self.game: Game = game
|
||||||
self.game_cover: GameCover = GameCover({self.cover})
|
self.game_cover: GameCover = GameCover({self.cover})
|
||||||
|
|
||||||
self.set_transient_for(shared.win)
|
|
||||||
|
|
||||||
if self.game:
|
if self.game:
|
||||||
self.set_title(_("Game Details"))
|
self.set_title(_("Game Details"))
|
||||||
self.name.set_text(self.game.name)
|
self.name.set_text(self.game.name)
|
||||||
@@ -152,7 +149,6 @@ class DetailsWindow(Adw.Window):
|
|||||||
self.executable.connect("entry-activated", self.apply_preferences)
|
self.executable.connect("entry-activated", self.apply_preferences)
|
||||||
|
|
||||||
self.set_focus(self.name)
|
self.set_focus(self.name)
|
||||||
self.present()
|
|
||||||
|
|
||||||
def delete_pixbuf(self, *_args: Any) -> None:
|
def delete_pixbuf(self, *_args: Any) -> None:
|
||||||
self.game_cover.new_cover()
|
self.game_cover.new_cover()
|
||||||
@@ -40,7 +40,7 @@ class Importer(ErrorProducer):
|
|||||||
|
|
||||||
progressbar: Gtk.ProgressBar
|
progressbar: Gtk.ProgressBar
|
||||||
import_statuspage: Adw.StatusPage
|
import_statuspage: Adw.StatusPage
|
||||||
import_dialog: Adw.MessageDialog
|
import_dialog: Adw.AlertDialog
|
||||||
summary_toast: Optional[Adw.Toast] = None
|
summary_toast: Optional[Adw.Toast] = None
|
||||||
|
|
||||||
sources: set[Source]
|
sources: set[Source]
|
||||||
@@ -53,7 +53,7 @@ class Importer(ErrorProducer):
|
|||||||
removed_game_ids: set[str]
|
removed_game_ids: set[str]
|
||||||
imported_game_ids: set[str]
|
imported_game_ids: set[str]
|
||||||
|
|
||||||
close_req_id: int
|
close_attempt_id: int
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -145,20 +145,17 @@ class Importer(ErrorProducer):
|
|||||||
title=_("Importing Games…"),
|
title=_("Importing Games…"),
|
||||||
child=self.progressbar,
|
child=self.progressbar,
|
||||||
)
|
)
|
||||||
self.import_dialog = Adw.Window(
|
self.import_dialog = Adw.Dialog(
|
||||||
content=self.import_statuspage,
|
child=self.import_statuspage,
|
||||||
modal=True,
|
content_width=350,
|
||||||
default_width=350,
|
can_close=False,
|
||||||
default_height=-1,
|
|
||||||
transient_for=shared.win,
|
|
||||||
deletable=False,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
self.close_req_id = self.import_dialog.connect(
|
self.close_attempt_id = self.import_dialog.connect(
|
||||||
"close-request", lambda *_: shared.win.close()
|
"close-attempt", lambda *_: shared.win.close()
|
||||||
)
|
)
|
||||||
|
|
||||||
self.import_dialog.present()
|
self.import_dialog.present(shared.win)
|
||||||
|
|
||||||
def source_task_thread_func(self, data: tuple) -> None:
|
def source_task_thread_func(self, data: tuple) -> None:
|
||||||
"""Source import task code"""
|
"""Source import task code"""
|
||||||
@@ -282,9 +279,9 @@ class Importer(ErrorProducer):
|
|||||||
self.imported_game_ids = shared.store.new_game_ids
|
self.imported_game_ids = shared.store.new_game_ids
|
||||||
shared.store.new_game_ids = set()
|
shared.store.new_game_ids = set()
|
||||||
shared.store.duplicate_game_ids = set()
|
shared.store.duplicate_game_ids = set()
|
||||||
# Disconnect the close-request signal that closes the main window
|
# Disconnect the close-attempt signal that closes the main window
|
||||||
self.import_dialog.disconnect(self.close_req_id)
|
self.import_dialog.disconnect(self.close_attempt_id)
|
||||||
self.import_dialog.close()
|
self.import_dialog.force_close()
|
||||||
self.__class__.summary_toast = self.create_summary_toast()
|
self.__class__.summary_toast = self.create_summary_toast()
|
||||||
self.create_error_dialog()
|
self.create_error_dialog()
|
||||||
shared.win.get_application().lookup_action("import").set_enabled(True)
|
shared.win.get_application().lookup_action("import").set_enabled(True)
|
||||||
@@ -317,13 +314,12 @@ class Importer(ErrorProducer):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Create error dialog
|
# Create error dialog
|
||||||
dialog = Adw.MessageDialog()
|
dialog = Adw.AlertDialog()
|
||||||
dialog.set_heading(_("Warning"))
|
dialog.set_heading(_("Warning"))
|
||||||
dialog.add_response("close", _("Dismiss"))
|
dialog.add_response("close", _("Dismiss"))
|
||||||
dialog.add_response("open_preferences_import", _("Preferences"))
|
dialog.add_response("open_preferences_import", _("Preferences"))
|
||||||
dialog.set_default_response("open_preferences_import")
|
dialog.set_default_response("open_preferences_import")
|
||||||
dialog.connect("response", self.dialog_response_callback)
|
dialog.connect("response", self.dialog_response_callback)
|
||||||
dialog.set_transient_for(shared.win)
|
|
||||||
|
|
||||||
if len(errors) == 1:
|
if len(errors) == 1:
|
||||||
dialog.set_heading((error := next(iter(errors)))[0])
|
dialog.set_heading((error := next(iter(errors)))[0])
|
||||||
@@ -342,7 +338,7 @@ class Importer(ErrorProducer):
|
|||||||
dialog.set_body(_("The following errors occured during import:"))
|
dialog.set_body(_("The following errors occured during import:"))
|
||||||
dialog.set_extra_child(list_box)
|
dialog.set_extra_child(list_box)
|
||||||
|
|
||||||
dialog.present()
|
dialog.present(shared.win)
|
||||||
|
|
||||||
def undo_import(self, *_args: Any) -> None:
|
def undo_import(self, *_args: Any) -> None:
|
||||||
for game_id in self.imported_game_ids:
|
for game_id in self.imported_game_ids:
|
||||||
@@ -407,7 +403,7 @@ class Importer(ErrorProducer):
|
|||||||
self,
|
self,
|
||||||
page_name: Optional[str] = None,
|
page_name: Optional[str] = None,
|
||||||
expander_row: Optional[Adw.ExpanderRow] = None,
|
expander_row: Optional[Adw.ExpanderRow] = None,
|
||||||
) -> Adw.PreferencesWindow:
|
) -> Adw.PreferencesDialog:
|
||||||
return shared.win.get_application().on_preferences_action(
|
return shared.win.get_application().on_preferences_action(
|
||||||
page_name=page_name, expander_row=expander_row
|
page_name=page_name, expander_row=expander_row
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# main.py
|
# main.py
|
||||||
#
|
#
|
||||||
# Copyright 2022-2023 kramo
|
# Copyright 2022-2024 kramo
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -34,7 +34,7 @@ gi.require_version("Adw", "1")
|
|||||||
from gi.repository import Adw, Gio, GLib, Gtk
|
from gi.repository import Adw, Gio, GLib, Gtk
|
||||||
|
|
||||||
from cartridges import shared
|
from cartridges import shared
|
||||||
from cartridges.details_window import DetailsWindow
|
from cartridges.details_dialog import DetailsDialog
|
||||||
from cartridges.game import Game
|
from cartridges.game import Game
|
||||||
from cartridges.importer.bottles_source import BottlesSource
|
from cartridges.importer.bottles_source import BottlesSource
|
||||||
from cartridges.importer.desktop_source import DesktopSource
|
from cartridges.importer.desktop_source import DesktopSource
|
||||||
@@ -47,7 +47,7 @@ from cartridges.importer.lutris_source import LutrisSource
|
|||||||
from cartridges.importer.retroarch_source import RetroarchSource
|
from cartridges.importer.retroarch_source import RetroarchSource
|
||||||
from cartridges.importer.steam_source import SteamSource
|
from cartridges.importer.steam_source import SteamSource
|
||||||
from cartridges.logging.setup import log_system_info, setup_logging
|
from cartridges.logging.setup import log_system_info, setup_logging
|
||||||
from cartridges.preferences import PreferencesWindow
|
from cartridges.preferences import CartridgesPreferences
|
||||||
from cartridges.store.managers.cover_manager import CoverManager
|
from cartridges.store.managers.cover_manager import CoverManager
|
||||||
from cartridges.store.managers.display_manager import DisplayManager
|
from cartridges.store.managers.display_manager import DisplayManager
|
||||||
from cartridges.store.managers.file_manager import FileManager
|
from cartridges.store.managers.file_manager import FileManager
|
||||||
@@ -153,7 +153,6 @@ class CartridgesApplication(Adw.Application):
|
|||||||
("go_to_parent", ("<alt>Up",), shared.win),
|
("go_to_parent", ("<alt>Up",), shared.win),
|
||||||
("go_home", ("<alt>Home",), shared.win),
|
("go_home", ("<alt>Home",), shared.win),
|
||||||
("toggle_search", ("<primary>f",), shared.win),
|
("toggle_search", ("<primary>f",), shared.win),
|
||||||
("escape", ("Escape",), shared.win),
|
|
||||||
("undo", ("<primary>z",), shared.win),
|
("undo", ("<primary>z",), shared.win),
|
||||||
("open_menu", ("F10",), shared.win),
|
("open_menu", ("F10",), shared.win),
|
||||||
("close", ("<primary>w",), shared.win),
|
("close", ("<primary>w",), shared.win),
|
||||||
@@ -246,10 +245,9 @@ class CartridgesApplication(Adw.Application):
|
|||||||
debug_str += log_file.read()
|
debug_str += log_file.read()
|
||||||
log_file.close()
|
log_file.close()
|
||||||
|
|
||||||
about = Adw.AboutWindow.new_from_appdata(
|
about = Adw.AboutDialog.new_from_appdata(
|
||||||
shared.PREFIX + "/" + shared.APP_ID + ".metainfo.xml", shared.VERSION
|
shared.PREFIX + "/" + shared.APP_ID + ".metainfo.xml", shared.VERSION
|
||||||
)
|
)
|
||||||
about.set_transient_for(shared.win)
|
|
||||||
about.set_developers(
|
about.set_developers(
|
||||||
(
|
(
|
||||||
"kramo https://kramo.page",
|
"kramo https://kramo.page",
|
||||||
@@ -264,7 +262,7 @@ class CartridgesApplication(Adw.Application):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
about.set_designers(("kramo https://kramo.page",))
|
about.set_designers(("kramo https://kramo.page",))
|
||||||
about.set_copyright("© 2022-2023 kramo")
|
about.set_copyright("© 2022-2024 kramo")
|
||||||
# Translators: Replace this with your name for it to show up in the about window
|
# Translators: Replace this with your name for it to show up in the about window
|
||||||
about.set_translator_credits = (_("translator_credits"),)
|
about.set_translator_credits = (_("translator_credits"),)
|
||||||
about.set_debug_info(debug_str)
|
about.set_debug_info(debug_str)
|
||||||
@@ -275,7 +273,7 @@ class CartridgesApplication(Adw.Application):
|
|||||||
Gtk.License.CUSTOM,
|
Gtk.License.CUSTOM,
|
||||||
"Steam and the Steam logo are trademarks and/or registered trademarks of Valve Corporation in the U.S. and/or other countries.", # pylint: disable=line-too-long
|
"Steam and the Steam logo are trademarks and/or registered trademarks of Valve Corporation in the U.S. and/or other countries.", # pylint: disable=line-too-long
|
||||||
)
|
)
|
||||||
about.present()
|
about.present(shared.win)
|
||||||
|
|
||||||
def on_preferences_action(
|
def on_preferences_action(
|
||||||
self,
|
self,
|
||||||
@@ -284,12 +282,12 @@ class CartridgesApplication(Adw.Application):
|
|||||||
page_name: Optional[str] = None,
|
page_name: Optional[str] = None,
|
||||||
expander_row: Optional[str] = None,
|
expander_row: Optional[str] = None,
|
||||||
) -> CartridgesWindow:
|
) -> CartridgesWindow:
|
||||||
win = PreferencesWindow()
|
win = CartridgesPreferences()
|
||||||
if page_name:
|
if page_name:
|
||||||
win.set_visible_page_name(page_name)
|
win.set_visible_page_name(page_name)
|
||||||
if expander_row:
|
if expander_row:
|
||||||
getattr(win, expander_row).set_expanded(True)
|
getattr(win, expander_row).set_expanded(True)
|
||||||
win.present()
|
win.present(shared.win)
|
||||||
|
|
||||||
return win
|
return win
|
||||||
|
|
||||||
@@ -300,10 +298,10 @@ class CartridgesApplication(Adw.Application):
|
|||||||
shared.win.active_game.toggle_hidden()
|
shared.win.active_game.toggle_hidden()
|
||||||
|
|
||||||
def on_edit_game_action(self, *_args: Any) -> None:
|
def on_edit_game_action(self, *_args: Any) -> None:
|
||||||
DetailsWindow(shared.win.active_game)
|
DetailsDialog(shared.win.active_game).present(shared.win)
|
||||||
|
|
||||||
def on_add_game_action(self, *_args: Any) -> None:
|
def on_add_game_action(self, *_args: Any) -> None:
|
||||||
DetailsWindow()
|
DetailsDialog().present(shared.win)
|
||||||
|
|
||||||
def on_import_action(self, *_args: Any) -> None:
|
def on_import_action(self, *_args: Any) -> None:
|
||||||
shared.importer = Importer()
|
shared.importer = Importer()
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ install_data(
|
|||||||
'main.py',
|
'main.py',
|
||||||
'window.py',
|
'window.py',
|
||||||
'preferences.py',
|
'preferences.py',
|
||||||
'details_window.py',
|
'details_dialog.py',
|
||||||
'game.py',
|
'game.py',
|
||||||
'game_cover.py',
|
'game_cover.py',
|
||||||
configure_file(
|
configure_file(
|
||||||
@@ -28,4 +28,4 @@ install_data(
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
install_dir: moduledir
|
install_dir: moduledir
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ from cartridges.utils.create_dialog import create_dialog
|
|||||||
|
|
||||||
|
|
||||||
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/preferences.ui")
|
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/preferences.ui")
|
||||||
class PreferencesWindow(Adw.PreferencesWindow):
|
class CartridgesPreferences(Adw.PreferencesDialog):
|
||||||
__gtype_name__ = "PreferencesWindow"
|
__gtype_name__ = "CartridgesPreferences"
|
||||||
|
|
||||||
general_page = Gtk.Template.Child()
|
general_page = Gtk.Template.Child()
|
||||||
import_page = Gtk.Template.Child()
|
import_page = Gtk.Template.Child()
|
||||||
@@ -121,7 +121,6 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
def __init__(self, **kwargs: Any) -> None:
|
def __init__(self, **kwargs: Any) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.file_chooser = Gtk.FileDialog()
|
self.file_chooser = Gtk.FileDialog()
|
||||||
self.set_transient_for(shared.win)
|
|
||||||
|
|
||||||
self.toast = Adw.Toast.new(_("All games removed"))
|
self.toast = Adw.Toast.new(_("All games removed"))
|
||||||
self.toast.set_button_label(_("Undo"))
|
self.toast.set_button_label(_("Undo"))
|
||||||
|
|||||||
@@ -28,12 +28,12 @@ def create_dialog(
|
|||||||
body: str,
|
body: str,
|
||||||
extra_option: Optional[str] = None,
|
extra_option: Optional[str] = None,
|
||||||
extra_label: Optional[str] = None,
|
extra_label: Optional[str] = None,
|
||||||
) -> Adw.MessageDialog:
|
) -> Adw.AlertDialog:
|
||||||
dialog = Adw.MessageDialog.new(win, heading, body)
|
dialog = Adw.AlertDialog.new(heading, body)
|
||||||
dialog.add_response("dismiss", _("Dismiss"))
|
dialog.add_response("dismiss", _("Dismiss"))
|
||||||
|
|
||||||
if extra_option:
|
if extra_option:
|
||||||
dialog.add_response(extra_option, _(extra_label))
|
dialog.add_response(extra_option, _(extra_label))
|
||||||
|
|
||||||
dialog.present()
|
dialog.choose(win)
|
||||||
return dialog
|
return dialog
|
||||||
|
|||||||
@@ -469,15 +469,6 @@ class CartridgesWindow(Adw.ApplicationWindow):
|
|||||||
|
|
||||||
search_entry.set_text("")
|
search_entry.set_text("")
|
||||||
|
|
||||||
def on_escape_action(self, *_args: Any) -> None:
|
|
||||||
if (
|
|
||||||
self.get_focus() == self.search_entry.get_focus_child()
|
|
||||||
or self.hidden_search_entry.get_focus_child()
|
|
||||||
):
|
|
||||||
self.on_toggle_search_action()
|
|
||||||
else:
|
|
||||||
self.navigation_view.pop()
|
|
||||||
|
|
||||||
def show_details_page_search(self, widget: Gtk.Widget) -> None:
|
def show_details_page_search(self, widget: Gtk.Widget) -> None:
|
||||||
library = (
|
library = (
|
||||||
self.hidden_library if widget == self.hidden_search_entry else self.library
|
self.hidden_library if widget == self.hidden_search_entry else self.library
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
||||||
<file preprocess="xml-stripblanks">gtk/game.ui</file>
|
<file preprocess="xml-stripblanks">gtk/game.ui</file>
|
||||||
<file preprocess="xml-stripblanks">gtk/preferences.ui</file>
|
<file preprocess="xml-stripblanks">gtk/preferences.ui</file>
|
||||||
<file preprocess="xml-stripblanks">gtk/details-window.ui</file>
|
<file preprocess="xml-stripblanks">gtk/details-dialog.ui</file>
|
||||||
<file alias="style.css">gtk/style.css</file>
|
<file alias="style.css">gtk/style.css</file>
|
||||||
<file alias="style-dark.css">gtk/style-dark.css</file>
|
<file alias="style-dark.css">gtk/style-dark.css</file>
|
||||||
<file>library_placeholder.svg</file>
|
<file>library_placeholder.svg</file>
|
||||||
|
|||||||
@@ -1,17 +1,8 @@
|
|||||||
using Gtk 4.0;
|
using Gtk 4.0;
|
||||||
using Adw 1;
|
using Adw 1;
|
||||||
|
|
||||||
template $DetailsWindow : Adw.Window {
|
template $DetailsDialog : Adw.Dialog {
|
||||||
default-width: 480; // Same as Nautilus' properties window
|
content-width: 480;
|
||||||
default-height: -1;
|
|
||||||
modal: true;
|
|
||||||
|
|
||||||
ShortcutController {
|
|
||||||
Shortcut {
|
|
||||||
trigger: "Escape";
|
|
||||||
action: "action(window.close)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Adw.ToolbarView {
|
Adw.ToolbarView {
|
||||||
|
|
||||||
@@ -85,7 +76,7 @@ template $DetailsWindow : Adw.Window {
|
|||||||
Picture cover {
|
Picture cover {
|
||||||
width-request: 200;
|
width-request: 200;
|
||||||
height-request: 300;
|
height-request: 300;
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"card"
|
"card"
|
||||||
]
|
]
|
||||||
@@ -149,4 +140,4 @@ template $DetailsWindow : Adw.Window {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
using Gtk 4.0;
|
using Gtk 4.0;
|
||||||
using Adw 1;
|
using Adw 1;
|
||||||
|
|
||||||
template $PreferencesWindow : Adw.PreferencesWindow {
|
template $CartridgesPreferences : Adw.PreferencesDialog {
|
||||||
|
search-enabled: true;
|
||||||
|
|
||||||
Adw.PreferencesPage general_page {
|
Adw.PreferencesPage general_page {
|
||||||
name: "general";
|
name: "general";
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ Adw.StatusPage hidden_notice_empty {
|
|||||||
|
|
||||||
template $CartridgesWindow : Adw.ApplicationWindow {
|
template $CartridgesWindow : Adw.ApplicationWindow {
|
||||||
title: _("Cartridges");
|
title: _("Cartridges");
|
||||||
width-request: 281;
|
width-request: 360;
|
||||||
height-request: 100;
|
height-request: 100;
|
||||||
|
|
||||||
Adw.Breakpoint {
|
Adw.Breakpoint {
|
||||||
@@ -75,6 +75,8 @@ template $CartridgesWindow : Adw.ApplicationWindow {
|
|||||||
title: _("All Games");
|
title: _("All Games");
|
||||||
|
|
||||||
Adw.OverlaySplitView overlay_split_view {
|
Adw.OverlaySplitView overlay_split_view {
|
||||||
|
sidebar-width-fraction: .2;
|
||||||
|
|
||||||
[sidebar]
|
[sidebar]
|
||||||
Adw.NavigationPage {
|
Adw.NavigationPage {
|
||||||
title: _("Cartridges");
|
title: _("Cartridges");
|
||||||
@@ -199,6 +201,13 @@ template $CartridgesWindow : Adw.ApplicationWindow {
|
|||||||
SearchEntry search_entry {
|
SearchEntry search_entry {
|
||||||
placeholder-text: _("Search");
|
placeholder-text: _("Search");
|
||||||
hexpand: true;
|
hexpand: true;
|
||||||
|
|
||||||
|
ShortcutController {
|
||||||
|
Shortcut {
|
||||||
|
trigger: "Escape";
|
||||||
|
action: "action(win.toggle_search)";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<url type="contribute">https://github.com/kra-mo/cartridges/blob/main/CONTRIBUTING.md</url>
|
<url type="contribute">https://github.com/kra-mo/cartridges/blob/main/CONTRIBUTING.md</url>
|
||||||
<!-- developer_name tag deprecated with Appstream 1.0 -->
|
<!-- developer_name tag deprecated with Appstream 1.0 -->
|
||||||
<developer_name translatable="no">kramo</developer_name>
|
<developer_name translatable="no">kramo</developer_name>
|
||||||
<developer id="kramo.page">
|
<developer id="page.kramo">
|
||||||
<name translatable="no">kramo</name>
|
<name translatable="no">kramo</name>
|
||||||
</developer>
|
</developer>
|
||||||
<launchable type="desktop-id">@APP_ID@.desktop</launchable>
|
<launchable type="desktop-id">@APP_ID@.desktop</launchable>
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
<control>touch</control>
|
<control>touch</control>
|
||||||
</supports>
|
</supports>
|
||||||
<recommends>
|
<recommends>
|
||||||
<display_length compare="gt">280</display_length>
|
<display_length compare="ge">360</display_length>
|
||||||
</recommends>
|
</recommends>
|
||||||
<screenshots>
|
<screenshots>
|
||||||
<screenshot type="default">
|
<screenshot type="default">
|
||||||
@@ -53,10 +53,10 @@
|
|||||||
</screenshots>
|
</screenshots>
|
||||||
<content_rating type="oars-1.1" />
|
<content_rating type="oars-1.1" />
|
||||||
<releases>
|
<releases>
|
||||||
<release version="2.7.4" date="2024-03-06">
|
<release version="2.8" date="2024-03-20">
|
||||||
<description translatable="no">
|
<description translatable="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Updated the app's metadata</li>
|
<li>The app features new adaptive widgets taking advantage of developments in GNOME 46</li>
|
||||||
</ul>
|
</ul>
|
||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ blueprints = custom_target('blueprints',
|
|||||||
'gtk/window.blp',
|
'gtk/window.blp',
|
||||||
'gtk/game.blp',
|
'gtk/game.blp',
|
||||||
'gtk/preferences.blp',
|
'gtk/preferences.blp',
|
||||||
'gtk/details-window.blp'
|
'gtk/details-dialog.blp'
|
||||||
),
|
),
|
||||||
output: '.',
|
output: '.',
|
||||||
command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'],
|
command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'],
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id" : "hu.kramo.Cartridges.Devel",
|
"id" : "hu.kramo.Cartridges.Devel",
|
||||||
"runtime" : "org.gnome.Platform",
|
"runtime" : "org.gnome.Platform",
|
||||||
"runtime-version" : "45",
|
"runtime-version" : "46",
|
||||||
"sdk" : "org.gnome.Sdk",
|
"sdk" : "org.gnome.Sdk",
|
||||||
"command" : "cartridges",
|
"command" : "cartridges",
|
||||||
"finish-args" : [
|
"finish-args" : [
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
project('cartridges',
|
project('cartridges',
|
||||||
version: '2.7.4',
|
version: '2.8',
|
||||||
meson_version: '>= 0.59.0',
|
meson_version: '>= 0.59.0',
|
||||||
default_options: [ 'warning_level=2', 'werror=false', ],
|
default_options: [ 'warning_level=2', 'werror=false', ],
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user