summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorChristian Dywan <christian@twotoasts.de>2018-08-30 16:22:01 +0200
committerChristian Dywan <christian@twotoasts.de>2018-08-30 18:01:32 +0200
commit3125a5cbae54a6a55e5e18793118eab5988333e0 (patch)
tree71124bc348f303529edd833c227139ee08737ba4 /core
parent2d7b4249e59b5b73b937da42562f8765e0392141 (diff)
downloadmidori-git-fullscreen-mode.tar.gz
Implement fullscreen modefullscreen-mode
Diffstat (limited to 'core')
-rw-r--r--core/browser.vala91
-rw-r--r--core/navigationbar.vala33
2 files changed, 89 insertions, 35 deletions
diff --git a/core/browser.vala b/core/browser.vala
index fa29617c..c1854bbb 100644
--- a/core/browser.vala
+++ b/core/browser.vala
@@ -16,6 +16,7 @@ namespace Midori {
public bool is_loading { get { return tab != null && tab.is_loading; } }
public Tab? tab { get; protected set; }
public ListStore trash { get; protected set; }
+ public bool is_fullscreen { get; protected set; default = false; }
const ActionEntry[] actions = {
{ "tab-new", tab_new_activated },
@@ -29,6 +30,7 @@ namespace Midori {
{ "tab-stop-loading", tab_stop_loading_activated },
{ "tab-previous", tab_previous_activated },
{ "tab-next", tab_next_activated },
+ { "fullscreen", fullscreen_activated },
{ "show-downloads", show_downloads_activated },
{ "find", find_activated },
{ "print", print_activated },
@@ -53,19 +55,7 @@ namespace Midori {
[GtkChild]
Gtk.Image profile_icon;
[GtkChild]
- Gtk.ActionBar navigationbar;
- [GtkChild]
- Gtk.Button go_back;
- [GtkChild]
- Gtk.Button go_forward;
- [GtkChild]
- Gtk.Button reload;
- [GtkChild]
- Gtk.Button stop_loading;
- [GtkChild]
- Urlbar urlbar;
- [GtkChild]
- Gtk.MenuButton menubutton;
+ Navigationbar navigationbar;
[GtkChild]
Gtk.Stack tabs;
[GtkChild]
@@ -82,11 +72,21 @@ namespace Midori {
construct {
overlay.add_events (Gdk.EventMask.ENTER_NOTIFY_MASK);
overlay.enter_notify_event.connect ((event) => {
+ if (is_fullscreen && !tab.pinned) {
+ navigationbar.show ();
+ navigationbar.urlbar.grab_focus ();
+ }
statusbar.hide ();
statusbar.halign = statusbar.halign == Gtk.Align.START ? Gtk.Align.END : Gtk.Align.START;
statusbar.show ();
return false;
});
+ navigationbar.urlbar.focus_out_event.connect ((event) => {
+ if (is_fullscreen) {
+ navigationbar.hide ();
+ }
+ return false;
+ });
add_action_entries (actions, this);
@@ -96,6 +96,7 @@ namespace Midori {
application.set_accels_for_action ("win.tab-close", { "<Primary>w" });
application.set_accels_for_action ("win.close", { "<Primary><Shift>w" });
application.set_accels_for_action ("win.tab-reopen", { "<Primary><Shift>t" });
+ application.set_accels_for_action ("win.fullscreen", { "F11" });
application.set_accels_for_action ("win.show-downloads", { "<Primary><Shift>j" });
application.set_accels_for_action ("win.find", { "<Primary>f", "slash" });
application.set_accels_for_action ("win.print", { "<Primary>p" });
@@ -118,7 +119,7 @@ namespace Midori {
application.set_accels_for_action ("win.tab-zoom(1.0)", { "<Primary>0" });
profile.menu_model = application.get_menu_by_id ("profile-menu");
- menubutton.menu_model = application.get_menu_by_id ("browser-menu");
+ navigationbar.menubutton.menu_model = application.get_menu_by_id ("browser-menu");
application.bind_busy_property (this, "is-loading");
// App menu fallback as a button rather than a menu
@@ -143,11 +144,12 @@ namespace Midori {
trash = new ListStore (typeof (DatabaseItem));
- urlbar.notify["uri"].connect ((pspec) => {
- if (urlbar.uri.has_prefix ("javascript:")) {
- tab.run_javascript.begin (urlbar.uri.substring (11, -1), null);
- } else if (urlbar.uri != tab.display_uri) {
- tab.load_uri (urlbar.uri);
+ navigationbar.urlbar.notify["uri"].connect ((pspec) => {
+ string uri = navigationbar.urlbar.uri;
+ if (uri.has_prefix ("javascript:")) {
+ tab.run_javascript.begin (uri.substring (11, -1), null);
+ } else if (uri != tab.display_uri) {
+ tab.load_uri (uri);
}
});
tabs.notify["visible-child"].connect (() => {
@@ -158,25 +160,25 @@ namespace Midori {
}
tab = (Tab)tabs.visible_child;
if (tab != null) {
- go_back.sensitive = tab.can_go_back;
- go_forward.sensitive = tab.can_go_forward;
- reload.visible = !tab.is_loading;
- stop_loading.visible = tab.is_loading;
- urlbar.progress_fraction = tab.progress;
+ navigationbar.go_back.sensitive = tab.can_go_back;
+ navigationbar.go_forward.sensitive = tab.can_go_forward;
+ navigationbar.reload.visible = !tab.is_loading;
+ navigationbar.stop_loading.visible = tab.is_loading;
+ navigationbar.urlbar.progress_fraction = tab.progress;
title = tab.display_title;
- urlbar.secure = tab.secure;
+ navigationbar.urlbar.secure = tab.secure;
statusbar.label = tab.link_uri;
- urlbar.uri = tab.display_uri;
+ navigationbar.urlbar.uri = tab.display_uri;
navigationbar.visible = !tab.pinned;
- bindings.append (tab.bind_property ("can-go-back", go_back, "sensitive"));
- bindings.append (tab.bind_property ("can-go-forward", go_forward, "sensitive"));
- bindings.append (tab.bind_property ("is-loading", reload, "visible", BindingFlags.INVERT_BOOLEAN));
- bindings.append (tab.bind_property ("is-loading", stop_loading, "visible"));
- bindings.append (tab.bind_property ("progress", urlbar, "progress-fraction"));
+ bindings.append (tab.bind_property ("can-go-back", navigationbar.go_back, "sensitive"));
+ bindings.append (tab.bind_property ("can-go-forward", navigationbar.go_forward, "sensitive"));
+ bindings.append (tab.bind_property ("is-loading", navigationbar.reload, "visible", BindingFlags.INVERT_BOOLEAN));
+ bindings.append (tab.bind_property ("is-loading", navigationbar.stop_loading, "visible"));
+ bindings.append (tab.bind_property ("progress", navigationbar.urlbar, "progress-fraction"));
bindings.append (tab.bind_property ("display-title", this, "title"));
- bindings.append (tab.bind_property ("secure", urlbar, "secure"));
+ bindings.append (tab.bind_property ("secure", navigationbar.urlbar, "secure"));
bindings.append (tab.bind_property ("link-uri", statusbar, "label"));
- bindings.append (tab.bind_property ("display-uri", urlbar, "uri"));
+ bindings.append (tab.bind_property ("display-uri", navigationbar.urlbar, "uri"));
bindings.append (tab.bind_property ("pinned", navigationbar, "visible", BindingFlags.INVERT_BOOLEAN));
tab.grab_focus ();
} else {
@@ -210,6 +212,7 @@ namespace Midori {
var box = (get_child () as Gtk.Box);
box.add (titlebar);
box.reorder_child (titlebar, 0);
+ bind_property ("is-fullscreen", titlebar, "visible", BindingFlags.INVERT_BOOLEAN);
titlebar.unref ();
titlebar.get_style_context ().remove_class ("titlebar");
} else {
@@ -258,7 +261,7 @@ namespace Midori {
}
if (base.key_press_event (event)) {
// Popdown completion if a key binding was fired
- urlbar.popdown ();
+ navigationbar.urlbar.popdown ();
return true;
}
return false;
@@ -296,7 +299,10 @@ namespace Midori {
}
void goto_activated () {
- urlbar.grab_focus ();
+ if (!tab.pinned) {
+ navigationbar.show ();
+ navigationbar.urlbar.grab_focus ();
+ }
}
void go_back_activated () {
@@ -341,6 +347,21 @@ namespace Midori {
}
}
+ void fullscreen_activated () {
+ is_fullscreen = !is_fullscreen;
+ navigationbar.restore.visible = is_fullscreen;
+ navigationbar.menubutton.visible = !is_fullscreen;
+ if (is_fullscreen) {
+ fullscreen ();
+ navigationbar.hide ();
+ panel.hide ();
+ } else {
+ unfullscreen ();
+ navigationbar.visible = !tab.pinned;
+ panel.visible = lookup_action ("panel").state.get_boolean ();
+ }
+ }
+
void show_downloads_activated () {
downloads.show_downloads ();
}
diff --git a/core/navigationbar.vala b/core/navigationbar.vala
new file mode 100644
index 00000000..f148ce80
--- /dev/null
+++ b/core/navigationbar.vala
@@ -0,0 +1,33 @@
+/*
+ Copyright (C) 2018 Christian Dywan <christian@twotoats.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ See the file COPYING for the full license text.
+*/
+
+namespace Midori {
+ [GtkTemplate (ui = "/ui/navigationbar.ui")]
+ public class Navigationbar : Gtk.ActionBar {
+ [GtkChild]
+ public Gtk.Button go_back;
+ [GtkChild]
+ public Gtk.Button go_forward;
+ [GtkChild]
+ public Gtk.Button reload;
+ [GtkChild]
+ public Gtk.Button stop_loading;
+ [GtkChild]
+ public Urlbar urlbar;
+ [GtkChild]
+ public Gtk.MenuButton menubutton;
+ [GtkChild]
+ public Gtk.Button restore;
+
+ construct {
+ }
+ }
+}