tAdd newview() and forward related views - surf - customized build of surf, the… | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit ad538bb00a38c5df7d7140414756724c1045307d | |
parent 421486db18ce2de31de71bf0372b6f5c049eb970 | |
Author: Quentin Rameau <[email protected]> | |
Date: Wed, 18 Nov 2015 16:53:37 +0100 | |
Add newview() and forward related views | |
View creation is now done in a separate function. | |
That helps identifying the workflow and let us easily carry related | |
view (client) when asked by the WebKit for a new one. | |
Diffstat: | |
M surf.c | 137 +++++++++++++++++------------… | |
1 file changed, 77 insertions(+), 60 deletions(-) | |
--- | |
diff --git a/surf.c b/surf.c | |
t@@ -155,7 +155,8 @@ static void loadstatuschange(WebKitWebView *view, GParamSp… | |
Client *c); | |
static void loaduri(Client *c, const Arg *arg); | |
static void navigate(Client *c, const Arg *arg); | |
-static Client *newclient(void); | |
+static Client *newclient(Client *c); | |
+static WebKitWebView *newview(Client *c, WebKitWebView *rv); | |
static void showview(WebKitWebView *v, Client *c); | |
static void newwindow(Client *c, const Arg *arg, gboolean noembed); | |
static void pasteuri(GtkClipboard *clipboard, const char *text, gpointer d); | |
t@@ -775,12 +776,10 @@ navigate(Client *c, const Arg *arg) | |
} | |
Client * | |
-newclient(void) | |
+newclient(Client *rc) | |
{ | |
Client *c; | |
- WebKitWebSettings *settings; | |
gdouble dpi; | |
- char *ua; | |
if (!(c = calloc(1, sizeof(Client)))) | |
die("Cannot malloc!\n"); | |
t@@ -788,94 +787,111 @@ newclient(void) | |
c->title = NULL; | |
c->progress = 100; | |
+ c->next = clients; | |
+ clients = c; | |
+ | |
+ c->view = newview(c, rc ? rc->view : NULL); | |
+ | |
+ return c; | |
+} | |
+ | |
+WebKitWebView * | |
+newview(Client *c, WebKitWebView *rv) | |
+{ | |
+ WebKitWebView *v; | |
+ WebKitSettings *settings; | |
+ char *ua; | |
+ | |
/* Webview */ | |
- c->view = WEBKIT_WEB_VIEW(webkit_web_view_new()); | |
+ if (rv) { | |
+ v = WEBKIT_WEB_VIEW( | |
+ webkit_web_view_new_with_related_view(rv)); | |
+ } else { | |
+ v = WEBKIT_WEB_VIEW(webkit_web_view_new()); | |
+ | |
+ settings = webkit_web_view_get_settings(v); | |
+ if (!(ua = getenv("SURF_USERAGENT"))) | |
+ ua = useragent; | |
+ g_object_set(G_OBJECT(settings), "user-agent", ua, NULL); | |
+ g_object_set(G_OBJECT(settings), | |
+ "auto-load-images", loadimages, NULL); | |
+ g_object_set(G_OBJECT(settings), | |
+ "enable-plugins", enableplugins, NULL); | |
+ g_object_set(G_OBJECT(settings), | |
+ "enable-scripts", enablescripts, NULL); | |
+ g_object_set(G_OBJECT(settings), | |
+ "enable-spatial-navigation", enablespatialbrowsin… | |
+ g_object_set(G_OBJECT(settings), | |
+ "enable-developer-extras", enableinspector, NULL); | |
+ g_object_set(G_OBJECT(settings), | |
+ "enable-default-context-menu", kioskmode ^ 1, NUL… | |
+ g_object_set(G_OBJECT(settings), | |
+ "default-font-size", defaultfontsize, NULL); | |
+ g_object_set(G_OBJECT(settings), | |
+ "resizable-text-areas", 1, NULL); | |
+ if (enablestyle) | |
+ setstyle(c, getstyle("about:blank")); | |
+ | |
+ if (enableinspector) { | |
+ c->inspector = webkit_web_view_get_inspector(v); | |
+ g_signal_connect(G_OBJECT(c->inspector), "inspect-web-… | |
+ G_CALLBACK(inspector_new), c); | |
+ g_signal_connect(G_OBJECT(c->inspector), "show-window", | |
+ G_CALLBACK(inspector_show), c); | |
+ g_signal_connect(G_OBJECT(c->inspector), "close-window… | |
+ G_CALLBACK(inspector_close), c); | |
+ g_signal_connect(G_OBJECT(c->inspector), "finished", | |
+ G_CALLBACK(inspector_finished), c); | |
+ c->isinspecting = false; | |
+ } | |
+ } | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"notify::title", | |
G_CALLBACK(titlechange), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"hovering-over-link", | |
G_CALLBACK(linkhover), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"geolocation-policy-decision-requested", | |
G_CALLBACK(geopolicyrequested), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"create-web-view", | |
G_CALLBACK(createwindow), c); | |
g_signal_connect(G_OBJECT(v), "ready-to-show", | |
G_CALLBACK(showview), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"new-window-policy-decision-requested", | |
G_CALLBACK(decidewindow), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"mime-type-policy-decision-requested", | |
G_CALLBACK(decidedownload), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"window-object-cleared", | |
G_CALLBACK(windowobjectcleared), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"notify::load-status", | |
G_CALLBACK(loadstatuschange), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"notify::progress", | |
G_CALLBACK(progresschange), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"download-requested", | |
G_CALLBACK(initdownload), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"button-release-event", | |
G_CALLBACK(buttonrelease), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"context-menu", | |
G_CALLBACK(contextmenu), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"resource-request-starting", | |
G_CALLBACK(beforerequest), c); | |
- g_signal_connect(G_OBJECT(c->view), | |
+ g_signal_connect(G_OBJECT(v), | |
"should-show-delete-interface-for-element", | |
G_CALLBACK(deletion_interface), c); | |
- settings = webkit_web_view_get_settings(c->view); | |
- if (!(ua = getenv("SURF_USERAGENT"))) | |
- ua = useragent; | |
- g_object_set(G_OBJECT(settings), "user-agent", ua, NULL); | |
- g_object_set(G_OBJECT(settings), | |
- "auto-load-images", loadimages, NULL); | |
- g_object_set(G_OBJECT(settings), | |
- "enable-plugins", enableplugins, NULL); | |
- g_object_set(G_OBJECT(settings), | |
- "enable-scripts", enablescripts, NULL); | |
- g_object_set(G_OBJECT(settings), | |
- "enable-spatial-navigation", enablespatialbrowsing, NULL); | |
- g_object_set(G_OBJECT(settings), | |
- "enable-developer-extras", enableinspector, NULL); | |
- g_object_set(G_OBJECT(settings), | |
- "enable-default-context-menu", kioskmode ^ 1, NULL); | |
- g_object_set(G_OBJECT(settings), | |
- "default-font-size", defaultfontsize, NULL); | |
- g_object_set(G_OBJECT(settings), | |
- "resizable-text-areas", 1, NULL); | |
- if (enablestyle) | |
- setstyle(c, getstyle("about:blank")); | |
- | |
- if (enableinspector) { | |
- c->inspector = webkit_web_view_get_inspector(c->view); | |
- g_signal_connect(G_OBJECT(c->inspector), "inspect-web-view", | |
- G_CALLBACK(inspector_new), c); | |
- g_signal_connect(G_OBJECT(c->inspector), "show-window", | |
- G_CALLBACK(inspector_show), c); | |
- g_signal_connect(G_OBJECT(c->inspector), "close-window", | |
- G_CALLBACK(inspector_close), c); | |
- g_signal_connect(G_OBJECT(c->inspector), "finished", | |
- G_CALLBACK(inspector_finished), c); | |
- c->isinspecting = false; | |
- } | |
- | |
- c->next = clients; | |
- clients = c; | |
- | |
- return c; | |
+ return v; | |
} | |
void | |
t@@ -1589,7 +1605,8 @@ main(int argc, char *argv[]) | |
arg.v = argv[0]; | |
setup(); | |
- c = newclient(); | |
+ c = newclient(NULL); | |
+ showview(NULL, c); | |
if (arg.v) | |
loaduri(clients, &arg); | |
else |