[geary] Do not use headerbar with Unity
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary] Do not use headerbar with Unity
- Date: Mon, 28 Nov 2016 11:05:47 +0000 (UTC)
commit 01c419ae5cc4daf57db98439f054fd06be054c68
Author: Kacper Bielecki <kazjote gmail com>
Date: Sun Nov 6 17:56:08 2016 +0100
Do not use headerbar with Unity
This commit reverts Unity workaround removal (commit 7b37e26; bug
738899).
However, in contrast to 7b37e26, it does not:
* set clock format to the one used for Unity clock indicator
* Use global GearyApplication.instance variable
Additionally, it makes detach button displayed always on the right while
running in Unity.
src/client/application/geary-config.vala | 16 ++++++++++++
src/client/application/geary-controller.vala | 4 +-
src/client/components/main-toolbar.vala | 8 +++--
src/client/components/main-window.vala | 35 ++++++++++++++++++++-----
src/client/composer/composer-headerbar.vala | 16 +++++++++---
src/client/composer/composer-widget.vala | 12 ++++++---
src/client/composer/composer-window.vala | 15 +++++++---
7 files changed, 81 insertions(+), 25 deletions(-)
---
diff --git a/src/client/application/geary-config.vala b/src/client/application/geary-config.vala
index da4341b..5a4e208 100644
--- a/src/client/application/geary-config.vala
+++ b/src/client/application/geary-config.vala
@@ -26,9 +26,25 @@ public class Configuration {
public const string SPELL_CHECK_LANGUAGES = "spell-check-languages";
public const string CONVERSATION_VIEWER_ZOOM_KEY = "conversation-viewer-zoom";
+ public enum DesktopEnvironment {
+ UNKNOWN = 0,
+ UNITY;
+ }
+
public Settings settings { get; private set; }
public Settings gnome_interface;
+ public DesktopEnvironment desktop_environment {
+ get {
+ switch (Environment.get_variable("XDG_CURRENT_DESKTOP")) {
+ case "Unity":
+ return DesktopEnvironment.UNITY;
+ default:
+ return DesktopEnvironment.UNKNOWN;
+ }
+ }
+ }
+
public int window_width {
get { return settings.get_int(WINDOW_WIDTH_KEY); }
}
diff --git a/src/client/application/geary-controller.vala b/src/client/application/geary-controller.vala
index f34cde9..2229089 100644
--- a/src/client/application/geary-controller.vala
+++ b/src/client/application/geary-controller.vala
@@ -2282,7 +2282,7 @@ public class GearyController : Geary.BaseObject {
ComposerWidget widget;
if (mailto != null) {
- widget = new ComposerWidget.from_mailto(current_account, mailto);
+ widget = new ComposerWidget.from_mailto(current_account, mailto, application.config);
} else {
Geary.Email? full = null;
if (referred != null) {
@@ -2295,7 +2295,7 @@ public class GearyController : Geary.BaseObject {
}
}
- widget = new ComposerWidget(current_account, compose_type, full, quote, is_draft);
+ widget = new ComposerWidget(current_account, compose_type, application.config, full, quote,
is_draft);
if (is_draft) {
yield widget.restore_draft_state_async(current_account);
}
diff --git a/src/client/components/main-toolbar.vala b/src/client/components/main-toolbar.vala
index 765cc8e..d28c114 100644
--- a/src/client/components/main-toolbar.vala
+++ b/src/client/components/main-toolbar.vala
@@ -54,7 +54,7 @@ public class MainToolbar : Gtk.Box {
[GtkChild]
private Gtk.ToggleButton find_button;
- public MainToolbar() {
+ public MainToolbar(Configuration config) {
this.action_group = GearyApplication.instance.actions;
// Instead of putting a separator between the two headerbars, as other applications do,
@@ -70,8 +70,10 @@ public class MainToolbar : Gtk.Box {
return true;
});
- this.bind_property("account", folder_header, "title", BindingFlags.SYNC_CREATE);
- this.bind_property("folder", folder_header, "subtitle", BindingFlags.SYNC_CREATE);
+ if (config.desktop_environment != Configuration.DesktopEnvironment.UNITY) {
+ this.bind_property("account", folder_header, "title", BindingFlags.SYNC_CREATE);
+ this.bind_property("folder", folder_header, "subtitle", BindingFlags.SYNC_CREATE);
+ }
this.bind_property("show-close-button-left", folder_header, "show-close-button",
BindingFlags.SYNC_CREATE);
this.bind_property("show-close-button-right", conversation_header, "show-close-button",
diff --git a/src/client/components/main-window.vala b/src/client/components/main-window.vala
index e8e7c8e..cb072bc 100644
--- a/src/client/components/main-window.vala
+++ b/src/client/components/main-window.vala
@@ -18,9 +18,10 @@ public class MainWindow : Gtk.ApplicationWindow {
public MainToolbar main_toolbar { get; private set; }
public SearchBar search_bar { get; private set; default = new SearchBar(); }
public ConversationListView conversation_list_view { get; private set; default = new
ConversationListView(); }
- public ConversationViewer conversation_viewer { get; private set; default = new ConversationViewer(); }
+ public ConversationViewer conversation_viewer { get; private set; }
public StatusBar status_bar { get; private set; default = new StatusBar(); }
public Geary.Folder? current_folder { get; private set; default = null; }
+ public Configuration config { get; private set; }
public int window_width { get; set; }
public int window_height { get; set; }
@@ -39,15 +40,17 @@ public class MainWindow : Gtk.ApplicationWindow {
public MainWindow(GearyApplication application) {
Object(application: application);
set_show_menubar(false);
-
+
add_events(Gdk.EventMask.KEY_PRESS_MASK | Gdk.EventMask.KEY_RELEASE_MASK
| Gdk.EventMask.FOCUS_CHANGE_MASK);
-
+
+ config = application.config;
+ conversation_viewer = new ConversationViewer();
+
// This code both loads AND saves the pane positions with live
// updating. This is more resilient against crashes because
// the value in dconf changes *immediately*, and stays saved
// in the event of a crash.
- Configuration config = GearyApplication.instance.config;
config.bind(Configuration.MESSAGES_PANE_POSITION_KEY, conversations_paned, "position");
config.bind(Configuration.WINDOW_WIDTH_KEY, this, "window-width");
config.bind(Configuration.WINDOW_HEIGHT_KEY, this, "window-height");
@@ -87,13 +90,26 @@ public class MainWindow : Gtk.ApplicationWindow {
Geary.Engine.instance.account_unavailable.connect(on_account_unavailable);
// Toolbar.
- main_toolbar = new MainToolbar();
+ main_toolbar = new MainToolbar(config);
main_toolbar.bind_property("search-open", search_bar, "search-mode-enabled",
BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
main_toolbar.bind_property("find-open", conversation_viewer.conversation_find_bar,
"search-mode-enabled",
BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
- main_toolbar.show_close_button = true;
- set_titlebar(main_toolbar);
+ if (config.desktop_environment == Configuration.DesktopEnvironment.UNITY) {
+ BindingTransformFunc title_func = (binding, source, ref target) => {
+ string folder = current_folder != null ? current_folder.get_display_name() + " " : "";
+ string account = main_toolbar.account != null ? "(%s)".printf(main_toolbar.account) : "";
+
+ target = "%s%s - %s".printf(folder, account, GearyApplication.NAME);
+
+ return true;
+ };
+ bind_property("current-folder", this, "title", BindingFlags.SYNC_CREATE, title_func);
+ main_toolbar.bind_property("account", this, "title", BindingFlags.SYNC_CREATE, title_func);
+ } else {
+ main_toolbar.show_close_button = true;
+ set_titlebar(main_toolbar);
+ }
set_styling();
create_layout();
@@ -209,6 +225,11 @@ public class MainWindow : Gtk.ApplicationWindow {
// Message list left of message viewer.
conversations_paned.pack1(search_bar_box, false, false);
conversations_paned.pack2(conversation_viewer, true, true);
+
+ if (config.desktop_environment == Configuration.DesktopEnvironment.UNITY) {
+ main_layout.pack_start(main_toolbar, false, true, 0);
+ }
+
main_layout.pack_end(conversations_paned, true, true, 0);
add(main_layout);
diff --git a/src/client/composer/composer-headerbar.vala b/src/client/composer/composer-headerbar.vala
index d8d4d41..9debbd0 100644
--- a/src/client/composer/composer-headerbar.vala
+++ b/src/client/composer/composer-headerbar.vala
@@ -7,6 +7,8 @@
[GtkTemplate (ui = "/org/gnome/Geary/composer-headerbar.ui")]
public class ComposerHeaderbar : Gtk.HeaderBar {
+ public Configuration config { get; set; }
+
public ComposerWidget.ComposerState state { get; set; }
public bool show_pending_attachments { get; set; default = false; }
@@ -29,7 +31,8 @@ public class ComposerHeaderbar : Gtk.HeaderBar {
[GtkChild]
private Gtk.Button send_button;
- public ComposerHeaderbar() {
+ public ComposerHeaderbar(Configuration config) {
+ this.config = config;
recipients_button.clicked.connect(() => { state = ComposerWidget.ComposerState.INLINE; });
send_button.image = new Gtk.Image.from_icon_name("mail-send-symbolic", Gtk.IconSize.MENU);
@@ -60,9 +63,14 @@ public class ComposerHeaderbar : Gtk.HeaderBar {
}
private void set_detach_button_side() {
- bool at_end = GtkUtil.close_button_at_end();
- detach_start.visible = !at_end;
- detach_end.visible = at_end;
+ if(config.desktop_environment == Configuration.DesktopEnvironment.UNITY) {
+ detach_start.visible = false;
+ detach_end.visible = true;
+ } else {
+ bool at_end = GtkUtil.close_button_at_end();
+ detach_start.visible = !at_end;
+ detach_end.visible = at_end;
+ }
}
}
diff --git a/src/client/composer/composer-widget.vala b/src/client/composer/composer-widget.vala
index e2760dc..16939b5 100644
--- a/src/client/composer/composer-widget.vala
+++ b/src/client/composer/composer-widget.vala
@@ -261,7 +261,7 @@ public class ComposerWidget : Gtk.EventBox {
}
}
- public ComposerHeaderbar header { get; private set; default = new ComposerHeaderbar(); }
+ public ComposerHeaderbar header { get; private set; }
public string draft_save_text { get; private set; }
@@ -271,6 +271,8 @@ public class ComposerWidget : Gtk.EventBox {
public string window_title { get; set; }
+ public Configuration config { get; set; }
+
[GtkChild]
internal Gtk.ScrolledWindow editor_scrolled;
@@ -381,8 +383,10 @@ public class ComposerWidget : Gtk.EventBox {
public signal void draft_id_changed(Geary.EmailIdentifier? id);
- public ComposerWidget(Geary.Account account, ComposeType compose_type,
+ public ComposerWidget(Geary.Account account, ComposeType compose_type, Configuration config,
Geary.Email? referred = null, string? quote = null, bool is_referred_draft = false) {
+ this.config = config;
+ this.header = new ComposerHeaderbar(config);
this.account = account;
this.compose_type = compose_type;
if (this.compose_type == ComposeType.NEW_MESSAGE)
@@ -556,8 +560,8 @@ public class ComposerWidget : Gtk.EventBox {
destroy.connect(() => { close_draft_manager_async.begin(null); });
}
- public ComposerWidget.from_mailto(Geary.Account account, string mailto) {
- this(account, ComposeType.NEW_MESSAGE);
+ public ComposerWidget.from_mailto(Geary.Account account, string mailto, Configuration config) {
+ this(account, ComposeType.NEW_MESSAGE, config);
Gee.HashMultiMap<string, string> headers = new Gee.HashMultiMap<string, string>();
if (mailto.length > Geary.ComposedEmail.MAILTO_SCHEME.length) {
diff --git a/src/client/composer/composer-window.vala b/src/client/composer/composer-window.vala
index 1b0dc22..ad48d23 100644
--- a/src/client/composer/composer-window.vala
+++ b/src/client/composer/composer-window.vala
@@ -33,11 +33,16 @@ public class ComposerWindow : Gtk.ApplicationWindow, ComposerContainer {
focus_in_event.connect(on_focus_in);
focus_out_event.connect(on_focus_out);
- this.composer.header.show_close_button = true;
- this.composer.free_header();
- set_titlebar(this.composer.header);
- composer.bind_property("window-title", this.composer.header, "title",
- BindingFlags.SYNC_CREATE);
+ if (composer.config.desktop_environment == Configuration.DesktopEnvironment.UNITY) {
+ composer.embed_header();
+ composer.bind_property("window-title", this, "title", BindingFlags.SYNC_CREATE);
+ } else {
+ this.composer.header.show_close_button = true;
+ this.composer.free_header();
+ set_titlebar(this.composer.header);
+ composer.bind_property("window-title", this.composer.header, "title",
+ BindingFlags.SYNC_CREATE);
+ }
show();
set_position(Gtk.WindowPosition.CENTER);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]