[gnome-games] ui: Add fullscreen buttons to the display header bar



commit a17690c2c655fde8d36796803b354907b9bd0a2d
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Sat Jul 30 18:04:27 2016 +0200

    ui: Add fullscreen buttons to the display header bar
    
    This finishes implementing fullscreen support.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=769329

 data/ui/display-box.ui         |    1 +
 data/ui/display-header-bar.ui  |   54 ++++++++++++++++++++++++++++++++++++++++
 src/ui/application-window.vala |    5 +++
 src/ui/display-box.vala        |    3 ++
 src/ui/display-header-bar.vala |   25 ++++++++++++++++++
 5 files changed, 88 insertions(+), 0 deletions(-)
---
diff --git a/data/ui/display-box.ui b/data/ui/display-box.ui
index 6ed51d7..c056305 100644
--- a/data/ui/display-box.ui
+++ b/data/ui/display-box.ui
@@ -21,6 +21,7 @@
             <property name="vexpand">False</property>
             <property name="transition-type">slide-down</property>
             <property name="events">GDK_POINTER_MOTION_MASK</property>
+            <signal name="notify::is-fullscreen" handler="on_fullscreen_changed"/>
             <signal name="motion-notify-event" handler="on_motion_event"/>
             <child>
               <object class="GamesDisplayHeaderBar" id="fullscreen_header_bar">
diff --git a/data/ui/display-header-bar.ui b/data/ui/display-header-bar.ui
index b3824d7..67d00af 100644
--- a/data/ui/display-header-bar.ui
+++ b/data/ui/display-header-bar.ui
@@ -5,6 +5,8 @@
     <property name="visible">True</property>
     <property name="can_focus">False</property>
     <property name="title" translatable="yes">Games</property>
+    <signal name="notify::is-fullscreen" handler="on_fullscrren_changed"/>
+    <signal name="notify::can-fullscreen" handler="on_fullscrren_changed"/>
     <child>
       <object class="GtkButton" id="back">
         <property name="visible">True</property>
@@ -28,5 +30,57 @@
         </child>
       </object>
     </child>
+    <child>
+      <object class="GtkButton" id="fullscreen">
+        <property name="visible">False</property>
+        <property name="valign">center</property>
+        <property name="use-underline">True</property>
+        <signal name="clicked" handler="on_fullscreen_clicked"/>
+        <style>
+          <class name="image-button"/>
+        </style>
+        <child internal-child="accessible">
+          <object class="AtkObject" id="a11y-fullscreen">
+            <property name="accessible-name" translatable="yes">Fullscreen</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkImage" id="fullscreen_image">
+            <property name="visible">True</property>
+            <property name="icon-name">view-fullscreen-symbolic</property>
+            <property name="icon-size">1</property>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="pack-type">end</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="restore">
+        <property name="visible">False</property>
+        <property name="valign">center</property>
+        <property name="use-underline">True</property>
+        <signal name="clicked" handler="on_restore_clicked"/>
+        <style>
+          <class name="image-button"/>
+        </style>
+        <child internal-child="accessible">
+          <object class="AtkObject" id="a11y-restore">
+            <property name="accessible-name" translatable="yes">Restore</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkImage" id="restore_image">
+            <property name="visible">True</property>
+            <property name="icon-name">view-restore-symbolic</property>
+            <property name="icon-size">1</property>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="pack-type">end</property>
+      </packing>
+    </child>
   </template>
 </interface>
diff --git a/src/ui/application-window.vala b/src/ui/application-window.vala
index 138f044..fb8bbd7 100644
--- a/src/ui/application-window.vala
+++ b/src/ui/application-window.vala
@@ -71,6 +71,7 @@ private class Games.ApplicationWindow : Gtk.ApplicationWindow {
        private Binding box_search_binding;
        private Binding box_fullscreen_binding;
        private Binding header_bar_search_binding;
+       private Binding header_bar_fullscreen_binding;
 
        private HashTable<Game, Runner> runners;
 
@@ -91,6 +92,8 @@ private class Games.ApplicationWindow : Gtk.ApplicationWindow {
 
                box_fullscreen_binding = bind_property ("is-fullscreen", display_box, "is-fullscreen",
                                                        BindingFlags.BIDIRECTIONAL);
+               header_bar_fullscreen_binding = bind_property ("is-fullscreen", display_header_bar, 
"is-fullscreen",
+                                                              BindingFlags.BIDIRECTIONAL);
        }
 
        public void run_game (Game game) {
@@ -183,7 +186,9 @@ private class Games.ApplicationWindow : Gtk.ApplicationWindow {
                }
 
                display_header_bar.game_title = game.name;
+               display_header_bar.can_fullscreen = runner.can_fullscreen;
                display_box.header_bar.game_title = game.name;
+               display_box.header_bar.can_fullscreen = runner.can_fullscreen;
                display_box.runner = runner;
                ui_state = UiState.DISPLAY;
 
diff --git a/src/ui/display-box.vala b/src/ui/display-box.vala
index 3744da1..8f9b462 100644
--- a/src/ui/display-box.vala
+++ b/src/ui/display-box.vala
@@ -34,12 +34,15 @@ private class Games.DisplayBox : Gtk.EventBox {
        [GtkChild]
        private DisplayHeaderBar fullscreen_header_bar;
        private Binding visible_binding;
+       private Binding fullscreen_binding;
 
        private long timeout_id;
 
        construct {
                visible_binding = bind_property ("is-fullscreen", fullscreen_header_bar_revealer, "visible",
                                                 BindingFlags.BIDIRECTIONAL);
+               fullscreen_binding = bind_property ("is-fullscreen", fullscreen_header_bar, "is-fullscreen",
+                                                BindingFlags.BIDIRECTIONAL);
                timeout_id = -1;
        }
 
diff --git a/src/ui/display-header-bar.vala b/src/ui/display-header-bar.vala
index 69b4bdd..85863b8 100644
--- a/src/ui/display-header-bar.vala
+++ b/src/ui/display-header-bar.vala
@@ -8,8 +8,33 @@ private class Games.DisplayHeaderBar : Gtk.HeaderBar {
                set { title = value; }
        }
 
+       public bool can_fullscreen { set; get; }
+       public bool is_fullscreen { set; get; }
+
+       [GtkChild]
+       private Gtk.Button fullscreen;
+
+       [GtkChild]
+       private Gtk.Button restore;
+
+       [GtkCallback]
+       private void on_fullscrren_changed () {
+               fullscreen.visible = can_fullscreen && !is_fullscreen;
+               restore.visible = can_fullscreen && is_fullscreen;
+       }
+
        [GtkCallback]
        private void on_back_clicked () {
                back ();
        }
+
+       [GtkCallback]
+       private void on_fullscreen_clicked () {
+               is_fullscreen = true;
+       }
+
+       [GtkCallback]
+       private void on_restore_clicked () {
+               is_fullscreen = false;
+       }
 }


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