Load a default app script into ClientWebViews at construction time.
* src/client/application/geary-controller.vala (GearyController::open_async): Load the app script for ClientWebView at startup. * src/client/components/client-web-view.vala (ClientWebView::ClientWebView): Ensure we actually have a UserContentManager instance to work with, add the app script to the manager for the instance. (ClientWebView::load_scripts): Actually load client-web-view.js. (ClientWebView::load_user_stylesheet): Helper method for this class and subsclasses for doing the actual script load from the app. * ui/client-web-view.js: Add boilerplaye for new file. * ui/CMakeLists.txt: Include client-web-view.js.
This commit is contained in:
parent
adf912faae
commit
09c9a398f7
4 changed files with 39 additions and 4 deletions
|
|
@ -207,11 +207,12 @@ public class GearyController : Geary.BaseObject {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Load web view stylesheets
|
// Load web view resources
|
||||||
try {
|
try {
|
||||||
|
ClientWebView.load_scripts(this.application);
|
||||||
ConversationWebView.load_stylehseets(this.application);
|
ConversationWebView.load_stylehseets(this.application);
|
||||||
} catch (Error err) {
|
} catch (Error err) {
|
||||||
error("Error loading application CSS: %s", err.message);
|
error("Error loading web resources: %s", err.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use a global avatar session because a cache must be used
|
// Use a global avatar session because a cache must be used
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2016 Software Freedom Conservancy Inc.
|
* Copyright 2016 Software Freedom Conservancy Inc.
|
||||||
|
* Copyright 2016 Michael Gratton <mike@vee.net>
|
||||||
*
|
*
|
||||||
* This software is licensed under the GNU Lesser General Public License
|
* This software is licensed under the GNU Lesser General Public License
|
||||||
* (version 2.1 or later). See the COPYING file in this distribution.
|
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||||
|
|
@ -13,6 +14,14 @@ public class ClientWebView : WebKit.WebView {
|
||||||
private const double ZOOM_DEFAULT = 1.0;
|
private const double ZOOM_DEFAULT = 1.0;
|
||||||
private const double ZOOM_FACTOR = 0.1;
|
private const double ZOOM_FACTOR = 0.1;
|
||||||
|
|
||||||
|
private static WebKit.UserScript? script = null;
|
||||||
|
|
||||||
|
public static void load_scripts(GearyApplication app)
|
||||||
|
throws Error {
|
||||||
|
ClientWebView.script = load_app_script(app, "client-web-view.js");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Loads an application-specific WebKit stylesheet. */
|
||||||
protected static WebKit.UserStyleSheet load_app_stylesheet(GearyApplication app,
|
protected static WebKit.UserStyleSheet load_app_stylesheet(GearyApplication app,
|
||||||
string name)
|
string name)
|
||||||
throws Error {
|
throws Error {
|
||||||
|
|
@ -25,6 +34,7 @@ public class ClientWebView : WebKit.WebView {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Loads a user stylesheet, if any. */
|
||||||
protected static WebKit.UserStyleSheet? load_user_stylesheet(GearyApplication app,
|
protected static WebKit.UserStyleSheet? load_user_stylesheet(GearyApplication app,
|
||||||
string name) {
|
string name) {
|
||||||
File stylesheet = app.get_user_config_directory().get_child(name);
|
File stylesheet = app.get_user_config_directory().get_child(name);
|
||||||
|
|
@ -47,6 +57,19 @@ public class ClientWebView : WebKit.WebView {
|
||||||
return user_stylesheet;
|
return user_stylesheet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Loads an application-specific WebKit JavaScript script. */
|
||||||
|
protected static WebKit.UserScript load_app_script(GearyApplication app,
|
||||||
|
string name)
|
||||||
|
throws Error {
|
||||||
|
return new WebKit.UserScript(
|
||||||
|
app.read_resource(name),
|
||||||
|
WebKit.UserContentInjectedFrames.TOP_FRAME,
|
||||||
|
WebKit.UserScriptInjectionTime.END,
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private static inline uint to_wk2_font_size(Pango.FontDescription font) {
|
private static inline uint to_wk2_font_size(Pango.FontDescription font) {
|
||||||
Gdk.Screen? screen = Gdk.Screen.get_default();
|
Gdk.Screen? screen = Gdk.Screen.get_default();
|
||||||
double dpi = screen != null ? screen.get_resolution() : 96.0;
|
double dpi = screen != null ? screen.get_resolution() : 96.0;
|
||||||
|
|
@ -102,7 +125,7 @@ public class ClientWebView : WebKit.WebView {
|
||||||
public signal void inline_resource_loaded(string cid);
|
public signal void inline_resource_loaded(string cid);
|
||||||
|
|
||||||
|
|
||||||
public ClientWebView(WebKit.UserContentManager? content_manager = null) {
|
public ClientWebView(WebKit.UserContentManager? custom_manager = null) {
|
||||||
WebKit.Settings setts = new WebKit.Settings();
|
WebKit.Settings setts = new WebKit.Settings();
|
||||||
setts.allow_modal_dialogs = false;
|
setts.allow_modal_dialogs = false;
|
||||||
setts.default_charset = "UTF-8";
|
setts.default_charset = "UTF-8";
|
||||||
|
|
@ -118,6 +141,10 @@ public class ClientWebView : WebKit.WebView {
|
||||||
setts.enable_plugins = false;
|
setts.enable_plugins = false;
|
||||||
setts.javascript_can_access_clipboard = true;
|
setts.javascript_can_access_clipboard = true;
|
||||||
|
|
||||||
|
WebKit.UserContentManager content_manager =
|
||||||
|
custom_manager ?? new WebKit.UserContentManager();
|
||||||
|
content_manager.add_script(ClientWebView.script);
|
||||||
|
|
||||||
Object(user_content_manager: content_manager, settings: setts);
|
Object(user_content_manager: content_manager, settings: setts);
|
||||||
|
|
||||||
// XXX get the allow prefix from the extension somehow
|
// XXX get the allow prefix from the extension somehow
|
||||||
|
|
@ -253,4 +280,3 @@ public class ClientWebView : WebKit.WebView {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ set(RESOURCE_LIST
|
||||||
STRIPBLANKS "account_list.glade"
|
STRIPBLANKS "account_list.glade"
|
||||||
STRIPBLANKS "account_spinner.glade"
|
STRIPBLANKS "account_spinner.glade"
|
||||||
STRIPBLANKS "certificate_warning_dialog.glade"
|
STRIPBLANKS "certificate_warning_dialog.glade"
|
||||||
|
"client-web-view.js"
|
||||||
STRIPBLANKS "composer-headerbar.ui"
|
STRIPBLANKS "composer-headerbar.ui"
|
||||||
STRIPBLANKS "composer-menus.ui"
|
STRIPBLANKS "composer-menus.ui"
|
||||||
STRIPBLANKS "composer-widget.ui"
|
STRIPBLANKS "composer-widget.ui"
|
||||||
|
|
|
||||||
7
ui/client-web-view.js
Normal file
7
ui/client-web-view.js
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2016 Michael Gratton <mike@vee.net>
|
||||||
|
*
|
||||||
|
* This software is licensed under the GNU Lesser General Public License
|
||||||
|
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue