| 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 |