[shotwell] Don't use GtkHeaderBar on dialogs if the gtk-dialogs-use-header setting is not set



commit ed6397c27094c113eb45ab08a0fcb5ad54859d91
Author: Robert Ancell <robert ancell canonical com>
Date:   Tue May 26 18:24:10 2015 +1200

    Don't use GtkHeaderBar on dialogs if the gtk-dialogs-use-header setting is not set
    
    https://bugzilla.gnome.org/show_bug.cgi?id=749874

 src/Dialogs.vala                    |   22 +++++++++++++---
 src/Properties.vala                 |    4 ++-
 src/data_imports/DataImportsUI.vala |   47 ++++++++++++++++++++++++++++++++---
 src/publishing/PublishingUI.vala    |   45 ++++++++++++++++++++++++++++++---
 4 files changed, 105 insertions(+), 13 deletions(-)
---
diff --git a/src/Dialogs.vala b/src/Dialogs.vala
index d760e73..24ce90c 100644
--- a/src/Dialogs.vala
+++ b/src/Dialogs.vala
@@ -168,7 +168,9 @@ public class ExportDialog : Gtk.Dialog {
     private bool in_insert = false;
     
     public ExportDialog(string title) {
-        Object (use_header_bar: 1);
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        Object (use_header_bar: use_header ? 1 : 0);
         
         this.title = title;
         resizable = false;
@@ -1191,7 +1193,9 @@ public class TextEntryDialog : Gtk.Dialog {
     private Gtk.ButtonBox action_area_box;
     
     public TextEntryDialog() {
-        Object (use_header_bar: 1);
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        Object (use_header_bar: use_header ? 1 : 0);
     }
     
     public void set_builder(Gtk.Builder builder) {
@@ -1264,7 +1268,9 @@ public class MultiTextEntryDialog : Gtk.Dialog {
     private Gtk.ButtonBox action_area_box;
     
     public MultiTextEntryDialog() {
-        Object (use_header_bar: 1);
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        Object (use_header_bar: use_header ? 1 : 0);
     }
     
     public void set_builder(Gtk.Builder builder) {
@@ -1649,7 +1655,9 @@ public class AdjustDateTimeDialog : Gtk.Dialog {
         bool contains_video = false, bool only_video = false) {
         assert(source != null);
 
-        Object(use_header_bar: 1);
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        Object(use_header_bar: use_header ? 1 : 0);
         
         set_modal(true);
         set_resizable(false);
@@ -2278,6 +2286,12 @@ public class PreferencesDialog {
         builder = AppWindow.create_builder();
         
         dialog = builder.get_object("preferences_dialog") as Gtk.Dialog;
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        if (!use_header) {
+            Gtk.Widget null_titlebar = null;
+            dialog.set_titlebar (null_titlebar);
+        }
         dialog.set_parent_window(AppWindow.get_instance().get_parent_window());
         dialog.set_transient_for(AppWindow.get_instance());
         dialog.delete_event.connect(on_delete);
diff --git a/src/Properties.vala b/src/Properties.vala
index 88e0e1d..a369649 100644
--- a/src/Properties.vala
+++ b/src/Properties.vala
@@ -630,7 +630,9 @@ private class ExtendedPropertiesWindow : Gtk.Dialog {
     }
 
     public ExtendedPropertiesWindow(Gtk.Window owner) {
-        Object(use_header_bar: 1);
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        Object(use_header_bar: use_header ? 1 : 0);
         
         add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.KEY_PRESS_MASK);
         focus_on_map = true;
diff --git a/src/data_imports/DataImportsUI.vala b/src/data_imports/DataImportsUI.vala
index 7b975a7..67ba2b9 100644
--- a/src/data_imports/DataImportsUI.vala
+++ b/src/data_imports/DataImportsUI.vala
@@ -208,13 +208,17 @@ public class DataImportsDialog : Gtk.Dialog {
     private Spit.DataImports.ConcreteDataImportsHost host;
 
     protected DataImportsDialog() {
-        Object(use_header_bar: 1);
-        ((Gtk.HeaderBar) get_header_bar()).set_show_close_button(false);
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        Object(use_header_bar: use_header ? 1 : 0);
+        if (use_header)
+            ((Gtk.HeaderBar) get_header_bar()).set_show_close_button(false);
 
         resizable = false;
         delete_event.connect(on_window_close);
         
         string title = _("Import From Application");
+        string label = _("Import media _from:");
         
         set_title(title);
 
@@ -245,6 +249,37 @@ public class DataImportsDialog : Gtk.Dialog {
                 service_selector_box.set_active(0);
 
             service_selector_box.changed.connect(on_service_changed);
+
+            if (!use_header)
+            {
+                var service_selector_box_label = new Gtk.Label.with_mnemonic(label);
+                service_selector_box_label.set_mnemonic_widget(service_selector_box);
+                service_selector_box_label.set_alignment(0.0f, 0.5f);
+
+                /* the wrapper is not an extraneous widget -- it's necessary to prevent the service
+                   selection box from growing and shrinking whenever its parent's size changes.
+                   When wrapped inside a Gtk.Alignment, the Alignment grows and shrinks instead of
+                   the service selection box. */
+                Gtk.Alignment service_selector_box_wrapper = new Gtk.Alignment(1.0f, 0.5f, 0.0f, 0.0f);
+                service_selector_box_wrapper.add(service_selector_box);
+
+                Gtk.Box service_selector_layouter = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 8);
+                service_selector_layouter.set_border_width(12);
+                service_selector_layouter.add(service_selector_box_label);
+                service_selector_layouter.pack_start(service_selector_box_wrapper, true, true, 0);
+
+                /* 'service area' is the selector assembly plus the horizontal rule dividing it from the
+                   rest of the dialog */
+                Gtk.Box service_area_layouter = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
+                service_area_layouter.pack_start(service_selector_layouter, true, true, 0);
+                Gtk.Separator service_central_separator = new Gtk.Separator(Gtk.Orientation.HORIZONTAL);
+                service_area_layouter.add(service_central_separator);
+
+                Gtk.Alignment service_area_wrapper = new Gtk.Alignment(0.0f, 0.0f, 1.0f, 0.0f);
+                service_area_wrapper.add(service_area_layouter);
+
+                ((Gtk.Box) get_content_area()).pack_start(service_area_wrapper, false, false, 0);
+            }
         }
         
         // Intall the central area in all cases
@@ -255,8 +290,12 @@ public class DataImportsDialog : Gtk.Dialog {
         close_cancel_button.set_can_default(true);
         close_cancel_button.clicked.connect(on_close_cancel_clicked);
 
-        ((Gtk.HeaderBar) get_header_bar()).pack_start(close_cancel_button);
-        ((Gtk.HeaderBar) get_header_bar()).pack_end(service_selector_box);
+        if (use_header) {
+            ((Gtk.HeaderBar) get_header_bar()).pack_start(close_cancel_button);
+            ((Gtk.HeaderBar) get_header_bar()).pack_end(service_selector_box);
+        }
+        else
+            ((Gtk.Box) get_action_area()).add(close_cancel_button);
 
         set_standard_window_mode();
         
diff --git a/src/publishing/PublishingUI.vala b/src/publishing/PublishingUI.vala
index a74bfaf..1722b17 100644
--- a/src/publishing/PublishingUI.vala
+++ b/src/publishing/PublishingUI.vala
@@ -156,8 +156,11 @@ public class PublishingDialog : Gtk.Dialog {
     protected PublishingDialog(Gee.Collection<MediaSource> to_publish) {
         assert(to_publish.size > 0);
 
-        Object(use_header_bar: 1);
-        ((Gtk.HeaderBar) get_header_bar()).set_show_close_button(false);
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        Object(use_header_bar: use_header ? 1 : 0);
+        if (use_header)
+            ((Gtk.HeaderBar) get_header_bar()).set_show_close_button(false);
         
         resizable = false;
         delete_event.connect(on_window_close);
@@ -243,6 +246,36 @@ public class PublishingDialog : Gtk.Dialog {
 
         service_selector_box.changed.connect(on_service_changed);
         
+        if (!use_header)
+        {
+            var service_selector_box_label = new Gtk.Label.with_mnemonic(label);
+            service_selector_box_label.set_mnemonic_widget(service_selector_box);
+            service_selector_box_label.set_alignment(0.0f, 0.5f);
+
+            /* the wrapper is not an extraneous widget -- it's necessary to prevent the service
+               selection box from growing and shrinking whenever its parent's size changes.
+               When wrapped inside a Gtk.Alignment, the Alignment grows and shrinks instead of
+               the service selection box. */
+            Gtk.Alignment service_selector_box_wrapper = new Gtk.Alignment(1.0f, 0.5f, 0.0f, 0.0f);
+            service_selector_box_wrapper.add(service_selector_box);
+
+            Gtk.Box service_selector_layouter = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 8);
+            service_selector_layouter.set_border_width(12);
+            service_selector_layouter.add(service_selector_box_label);
+            service_selector_layouter.pack_start(service_selector_box_wrapper, true, true, 0);
+
+            /* 'service area' is the selector assembly plus the horizontal rule dividing it from the
+               rest of the dialog */
+            Gtk.Box service_area_layouter = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
+            service_area_layouter.add(service_selector_layouter);
+            service_area_layouter.add(new Gtk.Separator(Gtk.Orientation.HORIZONTAL));
+
+            Gtk.Alignment service_area_wrapper = new Gtk.Alignment(0.0f, 0.0f, 1.0f, 0.0f);
+            service_area_wrapper.add(service_area_layouter);
+
+            get_content_area().pack_start(service_area_wrapper, false, false, 0);
+        }
+
         central_area_layouter = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
 
         get_content_area().pack_start(central_area_layouter, true, true, 0);
@@ -250,8 +283,12 @@ public class PublishingDialog : Gtk.Dialog {
         close_cancel_button = new Gtk.Button.with_mnemonic("_Cancel");
         close_cancel_button.set_can_default(true);
         close_cancel_button.clicked.connect(on_close_cancel_clicked);
-        ((Gtk.HeaderBar) get_header_bar()).pack_start(close_cancel_button);
-        ((Gtk.HeaderBar) get_header_bar()).pack_end(service_selector_box);
+        if (use_header) {
+            ((Gtk.HeaderBar) get_header_bar()).pack_start(close_cancel_button);
+            ((Gtk.HeaderBar) get_header_bar()).pack_end(service_selector_box);
+        }
+        else
+            ((Gtk.Container) get_action_area()).add(close_cancel_button);
 
         set_standard_window_mode();
         


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