New extension to delay page loading until page displays
Fixes: https://bugs.launchpad.net/midori/+bug/1010219
This commit is contained in:
parent
0ecfd696ba
commit
cef295aae9
2 changed files with 100 additions and 1 deletions
97
extensions/delayed-load.vala
Normal file
97
extensions/delayed-load.vala
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
Copyright (C) 2012 André Stösel <andre@stoesel.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.
|
||||
*/
|
||||
|
||||
using Katze;
|
||||
using Midori;
|
||||
|
||||
namespace DelayedLoad {
|
||||
private class Manager : Midori.Extension {
|
||||
private void tab_changed (GLib.Object window, GLib.ParamSpec pspec) {
|
||||
Midori.Browser browser = window as Midori.Browser;
|
||||
Midori.View? view = browser.tab as Midori.View;
|
||||
|
||||
Katze.Item item = view.get_proxy_item ();
|
||||
item.ref();
|
||||
|
||||
int64 delay = item.get_meta_integer ("delay");
|
||||
if (delay == -2 && view.can_reload ()) {
|
||||
view.reload (true);
|
||||
}
|
||||
}
|
||||
|
||||
private bool reload_first_tab () {
|
||||
Midori.App app = get_app ();
|
||||
Midori.Browser? browser = app.browser;
|
||||
Midori.View? view = browser.tab as Midori.View;
|
||||
|
||||
Katze.Item item = view.get_proxy_item ();
|
||||
item.ref();
|
||||
|
||||
int64 delay = item.get_meta_integer ("delay");
|
||||
if (delay != 1) {
|
||||
unowned WebKit.WebView web_view = view.get_web_view ();
|
||||
WebKit.LoadStatus load_status = web_view.load_status;
|
||||
if (load_status == WebKit.LoadStatus.FINISHED) {
|
||||
if (view.can_reload ())
|
||||
view.reload (false);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void browser_added (Midori.Browser browser) {
|
||||
browser.notify["tab"].connect (this.tab_changed);
|
||||
}
|
||||
|
||||
private void browser_removed (Midori.Browser browser) {
|
||||
browser.notify["tab"].disconnect (this.tab_changed);
|
||||
}
|
||||
|
||||
public void activated (Midori.App app) {
|
||||
/* FIXME: override behavior without changing the preference */
|
||||
app.settings.load_on_startup = MidoriStartup.DELAYED_PAGES;
|
||||
|
||||
Midori.Browser? focused_browser = app.browser;
|
||||
if (focused_browser == null)
|
||||
Timeout.add (50, this.reload_first_tab);
|
||||
|
||||
foreach (Midori.Browser browser in app.get_browsers ()) {
|
||||
browser_added (browser);
|
||||
}
|
||||
app.add_browser.connect (browser_added);
|
||||
}
|
||||
|
||||
public void deactivated () {
|
||||
Midori.App app = get_app ();
|
||||
foreach (Midori.Browser browser in app.get_browsers ()) {
|
||||
browser_removed (browser);
|
||||
}
|
||||
app.add_browser.disconnect (browser_added);
|
||||
}
|
||||
|
||||
internal Manager () {
|
||||
GLib.Object (name: _("Delayed load"),
|
||||
description: _("Delay page load until you actually use the tab."),
|
||||
version: "0.1",
|
||||
authors: "André Stösel <andre@stoesel.de>");
|
||||
|
||||
activate.connect (this.activated);
|
||||
deactivate.connect (this.deactivated);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Midori.Extension extension_init () {
|
||||
return new DelayedLoad.Manager ();
|
||||
}
|
||||
|
|
@ -14,7 +14,7 @@ namespace Midori {
|
|||
[NoAccessorMethod]
|
||||
public string name { get; set; }
|
||||
[NoAccessorMethod]
|
||||
public Midori.WebSettings settings { get; set; }
|
||||
public Midori.WebSettings settings { owned get; set; }
|
||||
[NoAccessorMethod]
|
||||
public GLib.Object bookmarks { get; set; }
|
||||
[NoAccessorMethod]
|
||||
|
@ -176,6 +176,8 @@ namespace Midori {
|
|||
|
||||
public class WebSettings : WebKit.WebSettings {
|
||||
public WebSettings ();
|
||||
[NoAccessorMethod]
|
||||
public MidoriStartup load_on_startup { get; set; }
|
||||
}
|
||||
|
||||
[CCode (cheader_filename = "midori/midori-websettings.h", cprefix = "MIDORI_STARTUP_")]
|
||||
|
|
Loading…
Reference in a new issue