tAdd showview() - surf - customized build of surf, the suckless webkit browser | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 421486db18ce2de31de71bf0372b6f5c049eb970 | |
parent f86977a6fab8ed51bd1208b843b9f53db0cdd058 | |
Author: Quentin Rameau <[email protected]> | |
Date: Wed, 18 Nov 2015 16:13:27 +0100 | |
Add showview() | |
Only show the window when and if the view is ready. | |
Move all the window rendering there. | |
Diffstat: | |
M surf.c | 129 ++++++++++++++++-------------… | |
1 file changed, 68 insertions(+), 61 deletions(-) | |
--- | |
diff --git a/surf.c b/surf.c | |
t@@ -156,6 +156,7 @@ static void loadstatuschange(WebKitWebView *view, GParamSp… | |
static void loaduri(Client *c, const Arg *arg); | |
static void navigate(Client *c, const Arg *arg); | |
static Client *newclient(void); | |
+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); | |
static gboolean contextmenu(WebKitWebView *view, GtkWidget *menu, | |
t@@ -778,9 +779,6 @@ newclient(void) | |
{ | |
Client *c; | |
WebKitWebSettings *settings; | |
- GdkGeometry hints = { 1, 1 }; | |
- GdkScreen *screen; | |
- GdkWindow *gwin; | |
gdouble dpi; | |
char *ua; | |
t@@ -790,37 +788,6 @@ newclient(void) | |
c->title = NULL; | |
c->progress = 100; | |
- /* Window */ | |
- if (embed) { | |
- c->win = gtk_plug_new(embed); | |
- } else { | |
- c->win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
- | |
- /* TA: 20091214: Despite what the GNOME docs say, the ICCCM | |
- * is always correct, so we should still call this function. | |
- * But when doing so, we *must* differentiate between a | |
- * WM_CLASS and a resource on the window. By convention, the | |
- * window class (WM_CLASS) is capped, while the resource is in | |
- * lowercase. Both these values come as a pair. | |
- */ | |
- gtk_window_set_wmclass(GTK_WINDOW(c->win), "surf", "Surf"); | |
- | |
- /* TA: 20091214: And set the role here as well -- so that | |
- * sessions can pick this up. | |
- */ | |
- gtk_window_set_role(GTK_WINDOW(c->win), "Surf"); | |
- } | |
- gtk_window_set_default_size(GTK_WINDOW(c->win), 800, 600); | |
- g_signal_connect(G_OBJECT(c->win), | |
- "destroy", | |
- G_CALLBACK(destroywin), c); | |
- g_signal_connect(G_OBJECT(c->win), | |
- "leave_notify_event", | |
- G_CALLBACK(titlechangeleave), c); | |
- | |
- if (!kioskmode) | |
- addaccelgroup(c); | |
- | |
/* Webview */ | |
c->view = WEBKIT_WEB_VIEW(webkit_web_view_new()); | |
t@@ -836,6 +803,8 @@ newclient(void) | |
g_signal_connect(G_OBJECT(c->view), | |
"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), | |
"new-window-policy-decision-requested", | |
G_CALLBACK(decidewindow), c); | |
t@@ -867,23 +836,6 @@ newclient(void) | |
"should-show-delete-interface-for-element", | |
G_CALLBACK(deletion_interface), c); | |
- /* Arranging */ | |
- gtk_container_add(GTK_CONTAINER(c->win), GTK_WIDGET(c->view)); | |
- | |
- /* Setup */ | |
- gtk_widget_grab_focus(GTK_WIDGET(c->view)); | |
- gtk_widget_show(GTK_WIDGET(c->view)); | |
- gtk_widget_show(c->win); | |
- gwin = gtk_widget_get_window(GTK_WIDGET(c->win)); | |
- c->xid = gdk_x11_window_get_xid(gwin); | |
- gtk_window_set_geometry_hints(GTK_WINDOW(c->win), NULL, &hints, | |
- GDK_HINT_MIN_SIZE); | |
- gdk_window_set_events(gwin, GDK_ALL_EVENTS_MASK); | |
- gdk_window_add_filter(gwin, processx, c); | |
- webkit_web_view_set_full_content_zoom(c->view, TRUE); | |
- | |
- runscript(frame); | |
- | |
settings = webkit_web_view_get_settings(c->view); | |
if (!(ua = getenv("SURF_USERAGENT"))) | |
ua = useragent; | |
t@@ -907,10 +859,6 @@ newclient(void) | |
if (enablestyle) | |
setstyle(c, getstyle("about:blank")); | |
- /* This might conflict with _zoomto96dpi_. */ | |
- if (zoomlevel != 1.0) | |
- webkit_web_view_set_zoom_level(c->view, zoomlevel); | |
- | |
if (enableinspector) { | |
c->inspector = webkit_web_view_get_inspector(c->view); | |
g_signal_connect(G_OBJECT(c->inspector), "inspect-web-view", | |
t@@ -924,16 +872,77 @@ newclient(void) | |
c->isinspecting = false; | |
} | |
+ c->next = clients; | |
+ clients = c; | |
+ | |
+ return c; | |
+} | |
+ | |
+void | |
+showview(WebKitWebView *v, Client *c) | |
+{ | |
+ GdkGeometry hints = { 1, 1 }; | |
+ GdkRGBA bgcolor = { 0 }; | |
+ GdkWindow *gwin; | |
+ | |
+ /* Window */ | |
+ if (embed) { | |
+ c->win = gtk_plug_new(embed); | |
+ } else { | |
+ c->win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
+ | |
+ /* TA: 20091214: Despite what the GNOME docs say, the ICCCM | |
+ * is always correct, so we should still call this function. | |
+ * But when doing so, we *must* differentiate between a | |
+ * WM_CLASS and a resource on the window. By convention, the | |
+ * window class (WM_CLASS) is capped, while the resource is in | |
+ * lowercase. Both these values come as a pair. | |
+ */ | |
+ gtk_window_set_wmclass(GTK_WINDOW(c->win), "surf", "Surf"); | |
+ | |
+ /* TA: 20091214: And set the role here as well -- so that | |
+ * sessions can pick this up. | |
+ */ | |
+ gtk_window_set_role(GTK_WINDOW(c->win), "Surf"); | |
+ } | |
+ gtk_window_set_default_size(GTK_WINDOW(c->win), 800, 600); | |
+ g_signal_connect(G_OBJECT(c->win), | |
+ "destroy", | |
+ G_CALLBACK(destroywin), c); | |
+ g_signal_connect(G_OBJECT(c->win), | |
+ "leave_notify_event", | |
+ G_CALLBACK(titlechangeleave), c); | |
+ | |
+ if (!kioskmode) | |
+ addaccelgroup(c); | |
+ | |
+ /* Arranging */ | |
+ gtk_container_add(GTK_CONTAINER(c->win), GTK_WIDGET(c->view)); | |
+ | |
+ /* Setup */ | |
+ gtk_widget_grab_focus(GTK_WIDGET(c->view)); | |
+ gtk_widget_show(GTK_WIDGET(c->view)); | |
+ gtk_widget_show(c->win); | |
+ gwin = gtk_widget_get_window(GTK_WIDGET(c->win)); | |
+ c->xid = gdk_x11_window_get_xid(gwin); | |
+ gtk_window_set_geometry_hints(GTK_WINDOW(c->win), NULL, &hints, | |
+ GDK_HINT_MIN_SIZE); | |
+ gdk_window_set_events(gwin, GDK_ALL_EVENTS_MASK); | |
+ gdk_window_add_filter(gwin, processx, c); | |
+ | |
+ runscript(frame); | |
+ | |
+ /* This might conflict with _zoomto96dpi_. */ | |
+ if (zoomlevel != 1.0) | |
+ webkit_web_view_set_zoom_level(c->view, zoomlevel); | |
+ | |
if (runinfullscreen) | |
fullscreen(c, NULL); | |
setatom(c, AtomFind, ""); | |
setatom(c, AtomUri, "about:blank"); | |
if (hidebackground) | |
- webkit_web_view_set_transparent(c->view, TRUE); | |
- | |
- c->next = clients; | |
- clients = c; | |
+ webkit_web_view_set_background_color(c->view, &bgcolor); | |
if (showxid) { | |
gdk_display_sync(gtk_widget_get_display(c->win)); | |
t@@ -943,8 +952,6 @@ newclient(void) | |
die("Error closing stdout"); | |
} | |
} | |
- | |
- return c; | |
} | |
void |