summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/browser.vala49
-rw-r--r--ui/browser.ui346
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>