From fb5ae3d7fad6b47ab6acddb0a640b8f073f02da7 Mon Sep 17 00:00:00 2001
From: Bruce Cowan <bruce@bcowan.me.uk>
Date: Tue, 25 Oct 2022 09:53:27 +0100
Subject: [PATCH] Use action for showing try filter

---
 data/gtk/help-overlay.blp |  5 +++++
 data/gtk/window.blp       |  3 +--
 src/main.c                |  3 +++
 src/rugby-app-window.c    | 11 +++++++----
 4 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/data/gtk/help-overlay.blp b/data/gtk/help-overlay.blp
index 633ef9a..218adf2 100644
--- a/data/gtk/help-overlay.blp
+++ b/data/gtk/help-overlay.blp
@@ -27,6 +27,11 @@ ShortcutsWindow help_overlay {
         title: "Decrement score";
         action-name: "win.score-changed::down";
       }
+
+      ShortcutsShortcut {
+        title: "Show try filter";
+        action-name: "win.show-try-filter";
+      }
     }
   }
 }
diff --git a/data/gtk/window.blp b/data/gtk/window.blp
index 1045cc9..0b31f50 100644
--- a/data/gtk/window.blp
+++ b/data/gtk/window.blp
@@ -24,10 +24,9 @@ template RugbyAppWindow : Adw.ApplicationWindow {
       }
 
       ToggleButton filter_toggle {
+        action-name: "win.show-try-filter";
         icon-name: "funnel";
         tooltip-text: "Show Try Filter";
-
-        toggled => filter_toggle_toggled_cb();
       }
 
       [end]
diff --git a/src/main.c b/src/main.c
index 2777032..1c9abb0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -77,6 +77,9 @@ on_startup (GApplication          *app,
     gtk_application_set_accels_for_action (GTK_APPLICATION (app),
                                            "win.score-changed::down",
                                            (const char*[]) { "<Ctrl>Down", "<Ctrl>Left", NULL });
+    gtk_application_set_accels_for_action (GTK_APPLICATION (app),
+                                           "win.show-try-filter",
+                                           (const char*[]) { "<Ctrl>F", NULL });
 }
 
 int
diff --git a/src/rugby-app-window.c b/src/rugby-app-window.c
index 4c5a692..fc77882 100644
--- a/src/rugby-app-window.c
+++ b/src/rugby-app-window.c
@@ -148,12 +148,13 @@ try_filter_func (gpointer item,
 }
 
 static void
-filter_toggle_toggled_cb (GtkToggleButton *btn,
-                          gpointer         user_data)
+show_try_filter_change_state (GSimpleAction *action,
+                              GVariant      *value,
+                              gpointer       user_data)
 {
     RugbyAppWindow *self = RUGBY_APP_WINDOW (user_data);
 
-    if (gtk_toggle_button_get_active (btn))
+    if (g_variant_get_boolean (value))
     {
         gtk_custom_filter_set_filter_func (self->try_filter, try_filter_func, self, NULL);
         gtk_filter_changed (GTK_FILTER (self->try_filter), GTK_FILTER_CHANGE_DIFFERENT);
@@ -162,6 +163,8 @@ filter_toggle_toggled_cb (GtkToggleButton *btn,
     {
         gtk_custom_filter_set_filter_func (self->try_filter, NULL, NULL, NULL);
     }
+
+    g_simple_action_set_state (action, value);
 }
 
 static void
@@ -171,6 +174,7 @@ rugby_app_window_init (RugbyAppWindow *self)
 
     const GActionEntry win_entries[] = {
         { .name = "score-changed", .activate = activate_score_changed, .parameter_type = "s" },
+        { .name = "show-try-filter", .state = "false", .change_state = show_try_filter_change_state },
     };
 
     g_action_map_add_action_entries (G_ACTION_MAP (self),
@@ -201,7 +205,6 @@ rugby_app_window_class_init (RugbyAppWindowClass *klass)
 
     gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, try_filter);
 
-    gtk_widget_class_bind_template_callback (widget_class, filter_toggle_toggled_cb);
     gtk_widget_class_bind_template_callback (widget_class, try_spin_value_changed_cb);
     gtk_widget_class_bind_template_callback (widget_class, item_tooltip_cb);
     gtk_widget_class_bind_template_callback (widget_class, list_store_items_changed_cb);
-- 
GitLab