diff --git a/main/src/ui/unified_window.vala b/main/src/ui/unified_window.vala index fb973a58..6e0a1070 100644 --- a/main/src/ui/unified_window.vala +++ b/main/src/ui/unified_window.vala @@ -20,6 +20,8 @@ public class UnifiedWindow : Gtk.Window { public ConversationSelector conversation_selector; public ConversationSummary.ConversationView conversation_frame; public ConversationTitlebar conversation_titlebar; + public ConversationTitlebarCsd conversation_titlebar_csd; + public ConversationListTitlebarCsd conversation_list_titlebar_csd; public HeaderBar placeholder_headerbar = new HeaderBar() { title="Dino", show_close_button=true, visible=true }; public Box box = new Box(Orientation.VERTICAL, 0) { orientation=Orientation.VERTICAL, visible=true }; public Paned headerbar_paned = new Paned(Orientation.HORIZONTAL) { visible=true }; @@ -44,6 +46,8 @@ public class UnifiedWindow : Gtk.Window { this.get_style_context().add_class("dino-main"); setup_headerbar(); + Gtk.Settings.get_default().notify["gtk-decoration-layout"].connect(set_window_buttons); + this.realize.connect(set_window_buttons); setup_unified(); setup_stack(); @@ -84,25 +88,12 @@ public class UnifiedWindow : Gtk.Window { private void setup_headerbar() { if (Util.use_csd()) { - ConversationListTitlebarCsd conversation_list_titlebar_csd = new ConversationListTitlebarCsd(stream_interactor, this) { visible=true }; + conversation_list_titlebar_csd = new ConversationListTitlebarCsd(stream_interactor, this) { visible=true }; headerbar_paned.pack1(conversation_list_titlebar_csd, false, false); - ConversationTitlebarCsd conversation_titlebar_csd = new ConversationTitlebarCsd() { visible=true }; + conversation_titlebar_csd = new ConversationTitlebarCsd() { visible=true }; conversation_titlebar = conversation_titlebar_csd; headerbar_paned.pack2(conversation_titlebar_csd, true, false); - - // Distribute start/end decoration_layout buttons to left/right headerbar. Ensure app menu fallback. - Gtk.Settings? gtk_settings = Gtk.Settings.get_default(); - if (gtk_settings != null) { - if (!gtk_settings.gtk_decoration_layout.contains("menu")) { - gtk_settings.gtk_decoration_layout = "menu:" + gtk_settings.gtk_decoration_layout; - } - string[] decoration_layout = gtk_settings.gtk_decoration_layout.split(":"); - if (decoration_layout.length == 2) { - conversation_list_titlebar_csd.decoration_layout = decoration_layout[0] + ":"; - conversation_titlebar_csd.decoration_layout = ":" + decoration_layout[1]; - } - } } else { ConversationListTitlebar conversation_list_titlebar = new ConversationListTitlebar(stream_interactor, this) { visible=true }; headerbar_paned.pack1(conversation_list_titlebar, false, false); @@ -115,6 +106,16 @@ public class UnifiedWindow : Gtk.Window { headerbar_paned.key_press_event.connect(forward_key_press_to_chat_input); } + private void set_window_buttons() { + if (!Util.use_csd()) return; + Gtk.Settings? gtk_settings = Gtk.Settings.get_default(); + if (gtk_settings == null) return; + + string[] buttons = gtk_settings.gtk_decoration_layout.split(":"); + this.conversation_list_titlebar_csd.decoration_layout = buttons[0] + ":"; + this.conversation_titlebar_csd.decoration_layout = ((buttons.length == 2) ? ":" + buttons[1] : ""); + } + private void setup_stack() { stack.add_named(box, "main"); stack.add_named(welcome_placeholder, "welcome_placeholder");