diff options
-rw-r--r-- | core/browser.vala | 49 | ||||
-rw-r--r-- | ui/browser.ui | 346 |
2 files changed, 247 insertions, 148 deletions
diff --git a/core/browser.vala b/core/browser.vala index 09c3214c..fa29617c 100644 --- a/core/browser.vala +++ b/core/browser.vala @@ -37,6 +37,14 @@ namespace Midori { { "about", about_activated }, }; [GtkChild] + Gtk.HeaderBar panelbar; + [GtkChild] + Gtk.Stack panel; + [GtkChild] + Gtk.ToggleButton panel_toggle; + [GtkChild] + Gtk.HeaderBar tabbar; + [GtkChild] DownloadButton downloads; [GtkChild] Gtk.MenuButton profile; @@ -83,6 +91,7 @@ namespace Midori { add_action_entries (actions, this); notify["application"].connect ((pspec) => { + application.set_accels_for_action ("win.panel", { "F9" }); application.set_accels_for_action ("win.tab-new", { "<Primary>t" }); application.set_accels_for_action ("win.tab-close", { "<Primary>w" }); application.set_accels_for_action ("win.close", { "<Primary><Shift>w" }); @@ -127,6 +136,10 @@ namespace Midori { action = new SimpleAction ("tab-zoom", VariantType.DOUBLE); action.activate.connect (tab_zoom_activated); add_action (action); + // Action for panel toggling + action = new SimpleAction.stateful ("panel", null, false); + action.change_state.connect (panel_activated); + add_action (action); trash = new ListStore (typeof (DatabaseItem)); @@ -189,14 +202,36 @@ namespace Midori { // Make headerbar (titlebar) the topmost bar if CSD is disabled if (Environment.get_variable ("GTK_CSD") == "0") { - var titlebar = (Gtk.HeaderBar)get_titlebar (); + var titlebar = get_titlebar (); titlebar.ref (); set_titlebar (null); - titlebar.show_close_button = false; - var box = (navigationbar.parent as Gtk.Box); + panelbar.show_close_button = false; + tabbar.show_close_button = false; + var box = (get_child () as Gtk.Box); box.add (titlebar); box.reorder_child (titlebar, 0); titlebar.unref (); + titlebar.get_style_context ().remove_class ("titlebar"); + } else { + Gtk.Settings.get_default ().notify["gtk-decoration-layout"].connect ((pspec) => { + update_decoration_layout (); + }); + update_decoration_layout (); + } + + // Reveal panel toggle after panels are added + panel.add.connect ((widget) => { panel_toggle.show (); }); + Plugins.get_default ().plug (panel); + } + + void update_decoration_layout () { + // With panels are visible the window decoration is split in two + if (panel.visible) { + string[] layout = Gtk.Settings.get_default ().gtk_decoration_layout.split (":", 2); + panelbar.decoration_layout = layout[0]; + tabbar.decoration_layout = ":" + layout[1]; + } else { + tabbar.decoration_layout = null; } } @@ -229,6 +264,14 @@ namespace Midori { return false; } + void panel_activated (SimpleAction action, Variant? state) { + if (panel_toggle.visible) { + action.set_state (state); + panel.visible = state.get_boolean (); + update_decoration_layout (); + } + } + void tab_new_activated () { var tab = new Tab (tab, web_context); add (tab); diff --git a/ui/browser.ui b/ui/browser.ui index d564b258..0d105d8c 100644 --- a/ui/browser.ui +++ b/ui/browser.ui @@ -18,212 +18,268 @@ <property name="default-width">800</property> <property name="default-height">600</property> <child type="titlebar"> - <object class="GtkHeaderBar"> - <property name="show-close-button">yes</property> + <object class="GtkPaned"> <property name="visible">yes</property> - <child type="title"> - <object class="GtkScrolledWindow" id="scrolled"> - <property name="hscrollbar-policy">external</property> - <property name="vscrollbar-policy">never</property> - <property name="visible">yes</property> - <child> - <object class="MidoriSwitcher"> - <property name="orientation">horizontal</property> - <property name="stack">tabs</property> - <property name="visible">yes</property> - </object> - </child> - </object> - </child> - <child> - <object class="MidoriDownloadButton" id="downloads"> - <property name="valign">center</property> - </object> - <packing> - <property name="pack-type">end</property> - </packing> - </child> + <property name="position" bind-source="paned" bind-property="position" bind-flags="bidirectional|sync-create"/> <child> - <object class="GtkMenuButton" id="app_menu"> - <property name="focus-on-click">no</property> - <property name="valign">center</property> - <child> - <object class="GtkImage"> - <property name="icon-name">view-more-symbolic</property> - <property name="use-fallback">yes</property> + <object class="GtkHeaderBar" id="panelbar"> + <property name="show-close-button">yes</property> + <property name="visible" bind-source="panel" bind-property="visible" bind-flags="sync-create"/> + <child type="title"> + <object class="GtkStackSwitcher"> + <property name="stack">panel</property> <property name="visible">yes</property> </object> </child> </object> <packing> - <property name="pack-type">end</property> + <property name="shrink">no</property> </packing> </child> - <child> - <object class="GtkMenuButton" id="profile"> - <property name="focus-on-click">no</property> - <property name="valign">center</property> + <child> + <object class="GtkHeaderBar" id="tabbar"> + <property name="show-close-button">yes</property> <property name="visible">yes</property> - <child> - <object class="GtkImage" id="profile_icon"> - <property name="icon-name">user-info-symbolic</property> - <property name="use-fallback">yes</property> + <child type="title"> + <object class="GtkScrolledWindow" id="scrolled"> + <property name="hscrollbar-policy">external</property> + <property name="vscrollbar-policy">never</property> <property name="visible">yes</property> + <child> + <object class="MidoriSwitcher"> + <property name="orientation">horizontal</property> + <property name="stack">tabs</property> + <property name="visible">yes</property> + </object> + </child> </object> </child> - </object> - <packing> - <property name="pack-type">end</property> - </packing> - </child> - <child> - <object class="GtkButton"> - <property name="focus-on-click">no</property> - <property name="valign">center</property> - <property name="action-name">win.tab-new</property> - <property name="visible">yes</property> <child> - <object class="GtkImage"> - <property name="icon-name">tab-new-symbolic</property> - <property name="visible">yes</property> + <object class="MidoriDownloadButton" id="downloads"> + <property name="valign">center</property> </object> + <packing> + <property name="pack-type">end</property> + </packing> </child> - </object> - <packing> - <property name="pack-type">end</property> - </packing> - </child> - </object> - </child> - <child> - <object class="GtkBox"> - <property name="orientation">vertical</property> - <property name="visible">yes</property> - <child> - <object class="GtkActionBar" id="navigationbar"> - <property name="visible">yes</property> <child> - <object class="GtkBox"> - <property name="orientation">horizontal</property> + <object class="GtkMenuButton" id="profile"> + <property name="focus-on-click">no</property> + <property name="valign">center</property> <property name="visible">yes</property> - <style> - <class name="linked"/> - </style> - <child> - <object class="GtkButton" id="go_back"> - <property name="focus-on-click">no</property> - <property name="action-name">win.go-back</property> - <property name="visible">yes</property> - <child> - <object class="GtkImage"> - <property name="icon-name">go-previous-symbolic</property> - <property name="visible">yes</property> - </object> - </child> - </object> - </child> <child> - <object class="GtkButton" id="go_forward"> - <property name="focus-on-click">no</property> - <property name="action-name">win.go-forward</property> + <object class="GtkImage" id="profile_icon"> + <property name="icon-name">user-info-symbolic</property> + <property name="use-fallback">yes</property> <property name="visible">yes</property> - <child> - <object class="GtkImage"> - <property name="icon-name">go-next-symbolic</property> - <property name="visible">yes</property> - </object> - </child> </object> </child> </object> + <packing> + <property name="pack-type">end</property> + </packing> </child> <child> - <object class="GtkButton" id="reload"> + <object class="GtkMenuButton" id="app_menu"> <property name="focus-on-click">no</property> - <property name="action-name">win.tab-reload</property> - <property name="visible">yes</property> + <property name="valign">center</property> <child> <object class="GtkImage"> - <property name="icon-name">view-refresh-symbolic</property> + <property name="icon-name">view-more-symbolic</property> + <property name="use-fallback">yes</property> <property name="visible">yes</property> </object> </child> </object> + <packing> + <property name="pack-type">end</property> + </packing> </child> <child> - <object class="GtkButton" id="stop_loading"> + <object class="GtkToggleButton" id="panel_toggle"> <property name="focus-on-click">no</property> - <property name="action-name">win.tab-stop-loading</property> - <property name="visible">yes</property> + <property name="valign">center</property> + <property name="action-name">win.panel</property> <child> <object class="GtkImage"> - <property name="icon-name">process-stop-symbolic</property> + <property name="icon-name">view-grid-symbolic</property> <property name="visible">yes</property> </object> </child> </object> - </child> - <child type="center"> - <object class="MidoriUrlbar" id="urlbar"> - <!-- expand has no effect, int.MAX doesn't work --> - <property name="max-width-chars">300</property> - <property name="margin-left">16</property> - <property name="margin-right">16</property> - <property name="visible">yes</property> - </object> + <packing> + <property name="pack-type">start</property> + </packing> </child> <child> - <object class="GtkMenuButton" id="menubutton"> + <object class="GtkButton"> + <property name="focus-on-click">no</property> <property name="valign">center</property> - <property name="direction">none</property> + <property name="action-name">win.tab-new</property> <property name="visible">yes</property> + <child> + <object class="GtkImage"> + <property name="icon-name">tab-new-symbolic</property> + <property name="visible">yes</property> + </object> + </child> </object> <packing> <property name="pack-type">end</property> </packing> </child> </object> + <packing> + <property name="shrink">no</property> + </packing> </child> + </object> + </child> + <child> + <object class="GtkBox"> + <property name="orientation">vertical</property> + <property name="visible">yes</property> <child> - <object class="MidoriNetworkCheck"> - </object> - </child> - <child> - <object class="GtkOverlay" id="overlay"> - <property name="hexpand">yes</property> - <property name="vexpand">yes</property> + <object class="GtkPaned" id="paned"> <property name="visible">yes</property> <child> - <object class="GtkStack" id="tabs"> - <property name="transition-type">over-left-right</property> - <property name="visible">yes</property> - <property name="hexpand">yes</property> - <property name="vexpand">yes</property> + <object class="GtkStack" id="panel"> + <property name="transition-type">slide-left-right</property> </object> </child> - <child type="overlay"> - <object class="GtkSearchBar" id="search"> - <property name="halign">end</property> - <property name="valign">start</property> - <property name="margin">0</property> - <style> - <class name="background"/> - </style> + <child> + <object class="GtkBox"> + <property name="orientation">vertical</property> + <property name="visible">yes</property> <child> - <object class="GtkSearchEntry" id="search_entry"> + <object class="GtkActionBar" id="navigationbar"> <property name="visible">yes</property> + <child> + <object class="GtkBox"> + <property name="orientation">horizontal</property> + <property name="visible">yes</property> + <style> + <class name="linked"/> + </style> + <child> + <object class="GtkButton" id="go_back"> + <property name="focus-on-click">no</property> + <property name="action-name">win.go-back</property> + <property name="visible">yes</property> + <child> + <object class="GtkImage"> + <property name="icon-name">go-previous-symbolic</property> + <property name="visible">yes</property> + </object> + </child> + </object> + </child> + <child> + <object class="GtkButton" id="go_forward"> + <property name="focus-on-click">no</property> + <property name="action-name">win.go-forward</property> + <property name="visible">yes</property> + <child> + <object class="GtkImage"> + <property name="icon-name">go-next-symbolic</property> + <property name="visible">yes</property> + </object> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkButton" id="reload"> + <property name="focus-on-click">no</property> + <property name="action-name">win.tab-reload</property> + <property name="visible">yes</property> + <child> + <object class="GtkImage"> + <property name="icon-name">view-refresh-symbolic</property> + <property name="visible">yes</property> + </object> + </child> + </object> + </child> + <child> + <object class="GtkButton" id="stop_loading"> + <property name="focus-on-click">no</property> + <property name="action-name">win.tab-stop-loading</property> + <property name="visible">yes</property> + <child> + <object class="GtkImage"> + <property name="icon-name">process-stop-symbolic</property> + <property name="visible">yes</property> + </object> + </child> + </object> + </child> + <child type="center"> + <object class="MidoriUrlbar" id="urlbar"> + <!-- expand has no effect, int.MAX doesn't work --> + <property name="max-width-chars">300</property> + <property name="margin-left">16</property> + <property name="margin-right">16</property> + <property name="visible">yes</property> + </object> + </child> + <child> + <object class="GtkMenuButton" id="menubutton"> + <property name="valign">center</property> + <property name="direction">none</property> + <property name="visible">yes</property> + </object> + <packing> + <property name="pack-type">end</property> + </packing> + </child> + </object> + </child> + <child> + <object class="MidoriNetworkCheck"> + </object> + </child> + <child> + <object class="GtkOverlay" id="overlay"> + <property name="hexpand">yes</property> + <property name="vexpand">yes</property> + <property name="visible">yes</property> + <child> + <object class="GtkStack" id="tabs"> + <property name="transition-type">over-left-right</property> + <property name="visible">yes</property> + <property name="hexpand">yes</property> + <property name="vexpand">yes</property> + </object> + </child> + <child type="overlay"> + <object class="GtkSearchBar" id="search"> + <property name="halign">end</property> + <property name="valign">start</property> + <property name="margin">0</property> + <style> + <class name="background"/> + </style> + <child> + <object class="GtkSearchEntry" id="search_entry"> + <property name="visible">yes</property> + </object> + </child> + </object> + </child> + <child type="overlay"> + <object class="MidoriStatusbar" id="statusbar"> + <property name="halign">start</property> + <property name="valign">end</property> + <property name="margin">0</property> + <style> + <class name="background"/> + </style> + </object> + </child> </object> </child> - </object> - </child> - <child type="overlay"> - <object class="MidoriStatusbar" id="statusbar"> - <property name="halign">start</property> - <property name="valign">end</property> - <property name="margin">0</property> - <style> - <class name="background"/> - </style> </object> </child> </object> |