[gnome-games] display-header-bar: Make load and delete buttons insensitive if there's no savestate selected



commit 0bfb8f3a3d50e0bd7dbeb084112cac4543d3ba28
Author: Yetizone <andreii lisita gmail com>
Date:   Sat Aug 10 15:12:36 2019 +0300

    display-header-bar: Make load and delete buttons insensitive if there's no savestate selected

 data/ui/display-header-bar.ui     | 10 ++++++----
 src/ui/display-box.vala           |  4 ++--
 src/ui/display-header-bar.vala    | 14 ++++++++++++--
 src/ui/savestates-list-state.vala |  1 +
 src/ui/savestates-list.vala       | 37 +++++++++++++++++++++----------------
 5 files changed, 42 insertions(+), 24 deletions(-)
---
diff --git a/data/ui/display-header-bar.ui b/data/ui/display-header-bar.ui
index 5c35ed95..668b6519 100644
--- a/data/ui/display-header-bar.ui
+++ b/data/ui/display-header-bar.ui
@@ -134,7 +134,8 @@
       <object class="GtkHeaderBar" id="savestates_header_bar">
         <property name="visible">True</property>
         <child>
-          <object class="GtkButton" id="load">
+          <object class="GtkButton" id="savestates_load_btn">
+            <property name="sensitive">False</property>
             <property name="visible">True</property>
             <property name="valign">center</property>
             <property name="use-underline">True</property>
@@ -149,7 +150,8 @@
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="delete">
+          <object class="GtkButton" id="savestates_delete_btn">
+            <property name="sensitive">False</property>
             <property name="visible">True</property>
             <property name="valign">center</property>
             <property name="use-underline">True</property>
@@ -208,8 +210,8 @@
   <object class="GtkSizeGroup">
     <property name="mode">GTK_SIZE_GROUP_HORIZONTAL</property>
     <widgets>
-      <widget name="load"/>
-      <widget name="delete"/>
+      <widget name="savestates_load_btn"/>
+      <widget name="savestates_delete_btn"/>
     </widgets>
   </object>
 </interface>
diff --git a/src/ui/display-box.vala b/src/ui/display-box.vala
index f268d8ea..4da9273f 100644
--- a/src/ui/display-box.vala
+++ b/src/ui/display-box.vala
@@ -13,7 +13,7 @@ private class Games.DisplayBox : Gtk.Bin {
        public SavestatesListState savestates_list_state {
                get { return savestates_list.state; }
                set {
-                       value.notify["is-revealed"].connect (on_savestates_list_state_changed);
+                       value.notify["is-revealed"].connect (on_savestates_list_revealed_changed);
 
                        savestates_list.state = value;
                        fullscreen_header_bar.savestates_list_state = value;
@@ -115,7 +115,7 @@ private class Games.DisplayBox : Gtk.Bin {
                return runner.gamepad_button_press_event (button);
        }
 
-       public void on_savestates_list_state_changed () {
+       public void on_savestates_list_revealed_changed () {
                fullscreen_box.autohide = !savestates_list.state.is_revealed;
        }
 }
diff --git a/src/ui/display-header-bar.vala b/src/ui/display-header-bar.vala
index 881ccf0e..0832ef7d 100644
--- a/src/ui/display-header-bar.vala
+++ b/src/ui/display-header-bar.vala
@@ -14,7 +14,8 @@ private class Games.DisplayHeaderBar : Gtk.Stack {
                        _savestates_list_state = value;
 
                        if (value != null)
-                               value.notify["is-revealed"].connect (on_savestates_list_state_changed);
+                               value.notify["is-revealed"].connect (on_savestates_list_revealed_changed);
+                               value.notify["selected-savestate"].connect (on_selected_savestate_changed);
                }
        }
 
@@ -83,6 +84,10 @@ private class Games.DisplayHeaderBar : Gtk.Stack {
        private Gtk.MenuButton secondary_menu_button;
        [GtkChild]
        private Gtk.HeaderBar savestates_header_bar;
+       [GtkChild]
+       private Gtk.Button savestates_load_btn;
+       [GtkChild]
+       private Gtk.Button savestates_delete_btn;
 
        private Settings settings;
 
@@ -141,10 +146,15 @@ private class Games.DisplayHeaderBar : Gtk.Stack {
                savestates_list_state.is_revealed = false;
        }
 
-       private void on_savestates_list_state_changed () {
+       private void on_savestates_list_revealed_changed () {
                if (savestates_list_state.is_revealed)
                        set_visible_child (savestates_header_bar);
                else
                        set_visible_child (ingame_header_bar);
        }
+
+       private void on_selected_savestate_changed () {
+               savestates_load_btn.sensitive = (savestates_list_state.selected_savestate != null);
+               savestates_delete_btn.sensitive = (savestates_list_state.selected_savestate != null);
+       }
 }
diff --git a/src/ui/savestates-list-state.vala b/src/ui/savestates-list-state.vala
index 0915d300..546da1af 100644
--- a/src/ui/savestates-list-state.vala
+++ b/src/ui/savestates-list-state.vala
@@ -3,4 +3,5 @@ private class Games.SavestatesListState : Object {
        public signal void delete_clicked ();
 
        public bool is_revealed { get; set; }
+       public Savestate? selected_savestate { get; set; }
 }
diff --git a/src/ui/savestates-list.vala b/src/ui/savestates-list.vala
index 22429fed..d0626f04 100644
--- a/src/ui/savestates-list.vala
+++ b/src/ui/savestates-list.vala
@@ -70,7 +70,7 @@ private class Games.SavestatesList : Gtk.Box {
                                var savestate_row = new SavestateListBoxRow (savestate);
 
                                list_box.insert (savestate_row, 1);
-                               select_and_preview_row (savestate_row);
+                               select_savestate_row (savestate_row);
                        }
                        else {
                                // Savestate creation failed
@@ -79,12 +79,8 @@ private class Games.SavestatesList : Gtk.Box {
                                // TODO: Perhaps we should warn the user that the creation of
                                // the savestate failed via an in-app notification ?
                        }
-               } else {
-                       var savestate_row = activated_row as SavestateListBoxRow;
-                       var savestate = savestate_row.savestate;
-
-                       runner.preview_savestate (savestate);
-               }
+               } else
+                       select_savestate_row (activated_row);
        }
 
        private void on_load_clicked () {
@@ -114,9 +110,10 @@ private class Games.SavestatesList : Gtk.Box {
                revealer.reveal_child = state.is_revealed;
 
                if (state.is_revealed) {
-                       list_box.select_row (null);
                        runner.capture_current_state_pixbuf ();
                        runner.pause ();
+
+                       select_savestate_row (null);
                }
                else
                        runner.resume ();
@@ -139,19 +136,19 @@ private class Games.SavestatesList : Gtk.Box {
 
                        if (nr_rows == 1) {
                                // The only remaining row in the list is the create savestate one
-                               runner.preview_current_state ();
+                               select_savestate_row (null);
                        }
                        else {
                                // The last row of the list has been deleted but there are still
                                // rows remaining in the list
                                var last_row = list_box.get_row_at_index (selected_row_index - 1);
-                               select_and_preview_row (last_row);
+                               select_savestate_row (last_row);
                        }
 
                        return;
                }
 
-               select_and_preview_row (next_row);
+               select_savestate_row (next_row);
        }
 
        private void update_header (Gtk.ListBoxRow row, Gtk.ListBoxRow? before) {
@@ -161,11 +158,19 @@ private class Games.SavestatesList : Gtk.Box {
                }
        }
 
-       private void select_and_preview_row (Gtk.ListBoxRow row) {
-               var savestate_row = row as SavestateListBoxRow;
-               var savestate = savestate_row.savestate;
+       private void select_savestate_row (Gtk.ListBoxRow? row) {
+               if (row == null) {
+                       list_box.select_row (null);
+                       runner.preview_current_state ();
+                       state.selected_savestate = null;
+               }
+               else {
+                       var savestate_row = row as SavestateListBoxRow;
+                       var savestate = savestate_row.savestate;
 
-               list_box.select_row (row);
-               runner.preview_savestate (savestate);
+                       list_box.select_row (row);
+                       runner.preview_savestate (savestate);
+                       state.selected_savestate = savestate;
+               }
        }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]