diff --git a/cartridges/ui/game-details.blp b/cartridges/ui/game-details.blp index 0283760..3b3d400 100644 --- a/cartridges/ui/game-details.blp +++ b/cartridges/ui/game-details.blp @@ -297,11 +297,12 @@ template $GameDetails: Adw.NavigationPage { Button { action-name: "details.edit-done"; - label: _("Done"); + label: _("Apply"); halign: center; styles [ "pill", + "suggested-action", ] } }; diff --git a/cartridges/ui/game_details.py b/cartridges/ui/game_details.py index 0498375..1589737 100644 --- a/cartridges/ui/game_details.py +++ b/cartridges/ui/game_details.py @@ -51,7 +51,6 @@ class GameDetails(Adw.NavigationPage): self.insert_action_group("details", group := Gio.SimpleActionGroup()) group.add_action_entries(( ("edit", lambda *_: self.edit()), - ("edit-done", lambda *_: self.edit_done()), ( "search-on", lambda _action, param, *_: Gio.AppInfo.launch_default_for_uri( @@ -61,6 +60,20 @@ class GameDetails(Adw.NavigationPage): ), )) + group.add_action(edit_done := Gio.SimpleAction.new("edit-done")) + edit_done.connect("activate", lambda *_: self._edit_done()) + + entries = tuple( + Gtk.PropertyExpression.new( + Adw.EntryRow, + Gtk.ConstantExpression.new_for_value(getattr(self, f"{prop}_entry")), + "text", + ) + for prop in _REQUIRED_PROPERTIES + ) + valid = Gtk.ClosureExpression.new(bool, lambda _, *values: all(values), entries) + valid.bind(edit_done, "enabled") + def edit(self): """Enter edit mode.""" for prop in _EDITABLE_PROPERTIES: