[gnome-builder] workbench: change close button to unfullscreen when fullscreen



commit 51ca80c3eba3397c15f777b7322955844fd43848
Author: Christian Hergert <chergert redhat com>
Date:   Sun Jul 23 18:19:25 2017 -0700

    workbench: change close button to unfullscreen when fullscreen
    
    If we are in the fullscreen state, we want to hide the close button to
    reduce the chances of accidentally closing things and instead provide an
    unfullscreen button.
    
    This more closely matches gedit and others.

 libide/workbench/ide-workbench-header-bar.c  |   14 ++++++++++++++
 libide/workbench/ide-workbench-header-bar.ui |   15 +++++++++++++++
 libide/workbench/ide-workbench-private.h     |   15 +++++++++------
 libide/workbench/ide-workbench.c             |    2 ++
 4 files changed, 40 insertions(+), 6 deletions(-)
---
diff --git a/libide/workbench/ide-workbench-header-bar.c b/libide/workbench/ide-workbench-header-bar.c
index 07c01d9..4f7ce35 100644
--- a/libide/workbench/ide-workbench-header-bar.c
+++ b/libide/workbench/ide-workbench-header-bar.c
@@ -31,6 +31,7 @@
 
 typedef struct
 {
+  GtkToggleButton *fullscreen_button;
   GtkMenuButton   *menu_button;
   DzlPriorityBox  *right_box;
   DzlPriorityBox  *left_box;
@@ -86,6 +87,7 @@ ide_workbench_header_bar_class_init (IdeWorkbenchHeaderBarClass *klass)
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
   gtk_widget_class_set_template_from_resource (widget_class, 
"/org/gnome/builder/ui/ide-workbench-header-bar.ui");
+  gtk_widget_class_bind_template_child_private (widget_class, IdeWorkbenchHeaderBar, fullscreen_button);
   gtk_widget_class_bind_template_child_private (widget_class, IdeWorkbenchHeaderBar, left_box);
   gtk_widget_class_bind_template_child_private (widget_class, IdeWorkbenchHeaderBar, menu_button);
   gtk_widget_class_bind_template_child_private (widget_class, IdeWorkbenchHeaderBar, omni_bar);
@@ -247,3 +249,15 @@ ide_workbench_header_bar_get_omni_bar (IdeWorkbenchHeaderBar *self)
 
   return priv->omni_bar;
 }
+
+void
+_ide_workbench_header_bar_set_fullscreen (IdeWorkbenchHeaderBar *self,
+                                          gboolean               fullscreen)
+{
+  IdeWorkbenchHeaderBarPrivate *priv = ide_workbench_header_bar_get_instance_private (self);
+
+  g_return_if_fail (IDE_IS_WORKBENCH_HEADER_BAR (self));
+
+  gtk_widget_set_visible (GTK_WIDGET (priv->fullscreen_button), fullscreen);
+  gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (self), !fullscreen);
+}
diff --git a/libide/workbench/ide-workbench-header-bar.ui b/libide/workbench/ide-workbench-header-bar.ui
index e32bbc2..7a56759 100644
--- a/libide/workbench/ide-workbench-header-bar.ui
+++ b/libide/workbench/ide-workbench-header-bar.ui
@@ -68,6 +68,21 @@
                 </child>
               </object>
             </child>
+            <child>
+              <object class="GtkToggleButton" id="fullscreen_button">
+                <property name="action-name">win.fullscreen</property>
+                <property name="focus-on-click">false</property>
+                <style>
+                  <class name="image-button"/>
+                </style>
+                <child>
+                  <object class="GtkImage">
+                    <property name="icon-name">view-restore-symbolic</property>
+                    <property name="visible">true</property>
+                  </object>
+                </child>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="priority">-100000</property>
diff --git a/libide/workbench/ide-workbench-private.h b/libide/workbench/ide-workbench-private.h
index 7d3a6fb..1e470ff 100644
--- a/libide/workbench/ide-workbench-private.h
+++ b/libide/workbench/ide-workbench-private.h
@@ -51,12 +51,15 @@ struct _IdeWorkbench
   GObject                   *selection_owner;
 };
 
-void     ide_workbench_set_context         (IdeWorkbench *workbench,
-                                            IdeContext   *context);
-void     ide_workbench_actions_init        (IdeWorkbench *self);
-void     ide_workbench_set_selection_owner (IdeWorkbench *self,
-                                            GObject      *object);
-GObject *ide_workbench_get_selection_owner (IdeWorkbench *self);
+void     ide_workbench_set_context                (IdeWorkbench          *workbench,
+                                                   IdeContext            *context);
+void     ide_workbench_actions_init               (IdeWorkbench          *self);
+void     ide_workbench_set_selection_owner        (IdeWorkbench          *self,
+                                                   GObject               *object);
+GObject *ide_workbench_get_selection_owner        (IdeWorkbench          *self);
+
+void     _ide_workbench_header_bar_set_fullscreen (IdeWorkbenchHeaderBar *self,
+                                                   gboolean               fullscreen);
 
 G_END_DECLS
 
diff --git a/libide/workbench/ide-workbench.c b/libide/workbench/ide-workbench.c
index 6bd25ae..6439103 100644
--- a/libide/workbench/ide-workbench.c
+++ b/libide/workbench/ide-workbench.c
@@ -222,6 +222,8 @@ ide_workbench_set_fullscreen (DzlApplicationWindow *window,
   gtk_container_foreach (GTK_CONTAINER (self->perspectives_stack),
                          ide_workbench_notify_fullscreen,
                          GINT_TO_POINTER (fullscreen));
+
+  _ide_workbench_header_bar_set_fullscreen (self->header_bar, fullscreen);
 }
 
 static void


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