[gnome-chess] Use inner headerbar in narrow mode



commit 0e8090dcd1a2979fa5de75b32076e1af6acfb224
Author: Michael Catanzaro <mcatanzaro gnome org>
Date:   Fri Dec 4 14:08:01 2020 -0600

    Use inner headerbar in narrow mode
    
    The main headerbar doesn't have enough space to show messages when the
    screen is narrow. So when running in mobile mode, let's add a secondary
    headerbar.

 data/gnome-chess.ui  |  7 ++++++-
 src/gnome-chess.vala | 45 ++++++++++++++++++++++++++++++++++++---------
 2 files changed, 42 insertions(+), 10 deletions(-)
---
diff --git a/data/gnome-chess.ui b/data/gnome-chess.ui
index 0831d89..0527e89 100644
--- a/data/gnome-chess.ui
+++ b/data/gnome-chess.ui
@@ -52,7 +52,7 @@
     <property name="default-width">700</property>
     <signal name="delete-event" handler="gnome_chess_app_delete_event_cb" swapped="no"/>
     <child type="titlebar">
-      <object class="GtkHeaderBar" id="headerbar">
+      <object class="GtkHeaderBar" id="main_headerbar">
         <property name="visible">True</property>
         <property name="can-focus">False</property>
         <property name="show-close-button">True</property>
@@ -137,6 +137,11 @@
             <property name="visible">False</property>
           </object>
         </child>
+        <child>
+          <object class="GtkHeaderBar" id="inner_headerbar">
+            <property name="can-focus">False</property>
+          </object>
+        </child>
         <child>
           <object class="GtkAlignment" id="view_container">
             <property name="visible">True</property>
diff --git a/src/gnome-chess.vala b/src/gnome-chess.vala
index 3cf5d22..bab90b2 100644
--- a/src/gnome-chess.vala
+++ b/src/gnome-chess.vala
@@ -28,6 +28,8 @@ public class ChessApplication : Gtk.Application
 
     private GLib.Settings settings;
     private ApplicationWindow window;
+    private HeaderBar main_headerbar;
+    private HeaderBar inner_headerbar;
     private InfoBar info_bar;
     private Container view_container;
     private ChessScene scene;
@@ -43,7 +45,6 @@ public class ChessApplication : Gtk.Application
     private Widget white_time_label;
     private Widget black_time_label;
     private Widget timer_increment_label;
-    private HeaderBar headerbar;
 
     private Dialog? preferences_dialog = null;
     private ComboBox side_combo;
@@ -162,6 +163,8 @@ Copyright © 2015–2016 Sahil Sareen""";
         window.size_allocate.connect (size_allocate_cb);
         window.window_state_event.connect (window_state_event_cb);
 
+        main_headerbar = (HeaderBar) builder.get_object ("main_headerbar");
+        inner_headerbar = (HeaderBar) builder.get_object ("inner_headerbar");
         info_bar = (InfoBar) builder.get_object ("info_bar");
         pause_resume_button = (Button) builder.get_object ("pause_button");
         navigation_box = (Box) builder.get_object ("navigation_box");
@@ -174,7 +177,6 @@ Copyright © 2015–2016 Sahil Sareen""";
         white_time_label = (Widget) builder.get_object ("white_time_label");
         black_time_label = (Widget) builder.get_object ("black_time_label");
         view_container = (Container) builder.get_object ("view_container");
-        headerbar = (HeaderBar) builder.get_object ("headerbar");
         builder.connect_signals (this);
 
         update_pause_resume_button ();
@@ -277,7 +279,23 @@ Copyright © 2015–2016 Sahil Sareen""";
             return;
         layout_mode = new_layout_mode;
 
-        navigation_box.set_orientation ((layout_mode == LayoutMode.NORMAL) ? Orientation.HORIZONTAL : 
Orientation.VERTICAL);
+        if (layout_mode == LayoutMode.NORMAL)
+        {
+            main_headerbar.title = inner_headerbar.title;
+            main_headerbar.subtitle = inner_headerbar.subtitle;
+            inner_headerbar.visible = false;
+
+            navigation_box.set_orientation (Orientation.HORIZONTAL);
+        }
+        else
+        {
+            inner_headerbar.title = main_headerbar.title;
+            inner_headerbar.subtitle = main_headerbar.subtitle;
+            inner_headerbar.visible = true;
+            main_headerbar.title = _("Chess");
+
+            navigation_box.set_orientation (Orientation.VERTICAL);
+        }
     }
 
     private void size_allocate_cb (Allocation allocation)
@@ -458,9 +476,9 @@ Copyright © 2015–2016 Sahil Sareen""";
         starting = true;
 
         if (game_file != null && game_file.get_path () != autosave_filename)
-            headerbar.set_subtitle (game_file.get_basename ());
+            main_headerbar.set_subtitle (game_file.get_basename ());
         else
-            headerbar.set_subtitle (null);
+            main_headerbar.set_subtitle (null);
 
         var model = (Gtk.ListStore) history_combo.model;
         model.clear ();
@@ -1221,8 +1239,18 @@ Copyright © 2015–2016 Sahil Sareen""";
             disable_window_action (UNDO_MOVE_ACTION_NAME);
     }
 
-    private void update_headerbar_title ()
+    private void update_headerbar_title (string? title = null, string? subtitle = null)
     {
+        var headerbar = layout_mode == LayoutMode.NORMAL ? main_headerbar : inner_headerbar;
+
+        if (title != null)
+        {
+            headerbar.set_title (title);
+            if (subtitle != null)
+                headerbar.set_subtitle (subtitle);
+            return;
+        }
+
         if (human_player != null &&
             human_player.color == game.current_player.color &&
             game.current_state.is_in_check (game.current_player))
@@ -1410,8 +1438,7 @@ Copyright © 2015–2016 Sahil Sareen""";
              break;
         }
 
-        headerbar.set_title (title);
-        headerbar.set_subtitle (reason);
+        update_headerbar_title (title, reason);
 
         white_time_label.queue_draw ();
         black_time_label.queue_draw ();
@@ -2315,7 +2342,7 @@ Copyright © 2015–2016 Sahil Sareen""";
                 save_dialog = null;
 
                 pgn_game.write (game_file);
-                headerbar.set_subtitle (game_file.get_basename ());
+                main_headerbar.set_subtitle (game_file.get_basename ());
                 disable_window_action (SAVE_GAME_ACTION_NAME);
                 game_needs_saving = false;
             }


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