Introduction
Introduction Statistics Contact Development Disclaimer Help
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
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.