tchanging xprops - surf - customized build of surf, the suckless webkit browser | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 36129338cfd64fd9aee8862060cddfd186d8b486 | |
parent 0a6eafe0778f96d98502bf5ebc71179ac5f2d241 | |
Author: Enno Boland (tox) <[email protected]> | |
Date: Mon, 17 May 2010 11:45:28 +0200 | |
changing xprops | |
Diffstat: | |
M config.def.h | 12 ++++++------ | |
M surf.c | 55 ++++++++++++++++-------------… | |
2 files changed, 35 insertions(+), 32 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -8,10 +8,10 @@ static char *cookiefile = ".surf/cookies.txt"; | |
static time_t sessiontime = 0; | |
#define NOBACKGROUND 0 | |
-#define SETPROP(p) { .v = (char *[]){ "/bin/sh", "-c", \ | |
- "prop=\"`xprop -id $1 $0 | cut -d '\"' -f 2 | dmenu`\" &&" \ | |
- "xprop -id $1 -f $0 8s -set $0 \"$prop\"", \ | |
- p, winid, NULL } } | |
+#define SETPROP(p, q) { .v = (char *[]){ "/bin/sh", "-c", \ | |
+ "prop=\"`xprop -id $2 $0 | cut -d '\"' -f 2 | dmenu`\" &&" \ | |
+ "xprop -id $2 -f $1 8s -set $1 \"$prop\"", \ | |
+ p, q, winid, NULL } } | |
#define MODKEY GDK_CONTROL_MASK | |
static Key keys[] = { | |
/* modifier keyval function arg Foc… | |
t@@ -29,8 +29,8 @@ static Key keys[] = { | |
{ MODKEY, GDK_k, scroll, { .i = -1 } }, | |
{ 0, GDK_Escape, stop, { 0 } }, | |
{ MODKEY, GDK_o, source, { 0 } }, | |
- { MODKEY, GDK_g, spawn, SETPROP("_SURF_URI") }, | |
- { MODKEY, GDK_slash, spawn, SETPROP("_SURF_FIND") }, | |
+ { MODKEY, GDK_g, spawn, SETPROP("_SURF_URI", "_SUR… | |
+ { MODKEY, GDK_slash, spawn, SETPROP("_SURF_FIND", "_SU… | |
{ MODKEY, GDK_n, find, { .b = TRUE } }, | |
{ MODKEY|GDK_SHIFT_MASK,GDK_n, find, { .b = FALSE } }, | |
}; | |
diff --git a/surf.c b/surf.c | |
t@@ -23,6 +23,8 @@ | |
#define LENGTH(x) (sizeof x / sizeof x[0]) | |
#define CLEANMASK(mask) (mask & ~(GDK_MOD2_MASK)) | |
+enum { AtomFind, AtomGo, AtomUri, AtomHiLight, AtomLast }; | |
+ | |
typedef union Arg Arg; | |
union Arg { | |
gboolean b; | |
t@@ -54,11 +56,10 @@ typedef struct { | |
} Key; | |
static Display *dpy; | |
-static Atom uriprop, findprop; | |
+static Atom atoms[AtomLast]; | |
static Client *clients = NULL; | |
static GdkNativeWindow embed = 0; | |
static gboolean showxid = FALSE; | |
-static int ignorexprop = 0; | |
static char winid[64]; | |
static char *progname; | |
static gboolean loadimage = 1, plugin = 1, script = 1; | |
t@@ -76,7 +77,7 @@ static void die(char *str); | |
static void drawindicator(Client *c); | |
static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c); | |
static void find(Client *c, const Arg *arg); | |
-static const char *getatom(Client *c, Atom a); | |
+static const char *getatom(Client *c, int a); | |
static const char *getcookies(SoupURI *uri); | |
static char *geturi(Client *c); | |
void gotheaders(SoupMessage *msg, gpointer user_data); | |
t@@ -95,7 +96,7 @@ static void progresschange(WebKitWebView *view, GParamSpec *… | |
static void reload(Client *c, const Arg *arg); | |
static void resize(GtkWidget *w, GtkAllocation *a, Client *c); | |
static void scroll(Client *c, const Arg *arg); | |
-static void setatom(Client *c, Atom a, const char *v); | |
+static void setatom(Client *c, int a, const char *v); | |
static void setcookie(SoupCookie *c); | |
static void setup(void); | |
static void sigchld(int unused); | |
t@@ -247,7 +248,7 @@ drawindicator(Client *c) { | |
GdkGC *gc; | |
GdkColor fg; | |
- uri = getatom(c, uriprop); | |
+ uri = geturi(c); | |
w = c->indicator; | |
width = c->progress * w->allocation.width / 100; | |
gc = gdk_gc_new(w->window); | |
t@@ -272,7 +273,7 @@ void | |
find(Client *c, const Arg *arg) { | |
const char *s; | |
- s = getatom(c, findprop); | |
+ s = getatom(c, AtomFind); | |
gboolean forward = *(gboolean *)arg; | |
webkit_web_view_search_text(c->view, s, FALSE, forward, TRUE); | |
} | |
t@@ -287,7 +288,7 @@ getcookies(SoupURI *uri) { | |
} | |
const char * | |
-getatom(Client *c, Atom a) { | |
+getatom(Client *c, int a) { | |
static char buf[BUFSIZ]; | |
Atom adummy; | |
int idummy; | |
t@@ -295,7 +296,7 @@ getatom(Client *c, Atom a) { | |
unsigned char *p = NULL; | |
XGetWindowProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), | |
- a, 0L, BUFSIZ, False, XA_STRING, | |
+ atoms[a], 0L, BUFSIZ, False, XA_STRING, | |
&adummy, &idummy, &ldummy, &ldummy, &p); | |
if(p) | |
strncpy(buf, (char *)p, LENGTH(buf)-1); | |
t@@ -360,7 +361,7 @@ void | |
loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c) { | |
switch(webkit_web_view_get_load_status (c->view)) { | |
case WEBKIT_LOAD_COMMITTED: | |
- setatom(c, uriprop, geturi(c)); | |
+ setatom(c, AtomUri, geturi(c)); | |
break; | |
case WEBKIT_LOAD_FINISHED: | |
c->progress = 0; | |
t@@ -491,8 +492,9 @@ newclient(void) { | |
g_object_set(G_OBJECT(settings), "enable-plugins", plugin, NULL); | |
g_object_set(G_OBJECT(settings), "enable-scripts", script, NULL); | |
g_free(uri); | |
- setatom(c, findprop, ""); | |
- setatom(c, uriprop, ""); | |
+ | |
+ setatom(c, AtomFind, ""); | |
+ setatom(c, AtomUri, "about:blank"); | |
if(NOBACKGROUND) | |
webkit_web_view_set_transparent(c->view, TRUE); | |
t@@ -569,18 +571,17 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d) { | |
if(((XEvent *)e)->type == PropertyNotify) { | |
ev = &((XEvent *)e)->xproperty; | |
- if(ignorexprop) | |
- ignorexprop--; | |
- else if(ev->state == PropertyNewValue) { | |
- if(ev->atom == uriprop) { | |
- arg.v = getatom(c, uriprop); | |
- loaduri(c, &arg); | |
- } | |
- else if(ev->atom == findprop) { | |
+ if(ev->state == PropertyNewValue) { | |
+ if(ev->atom == atoms[AtomFind]) { | |
arg.b = TRUE; | |
find(c, &arg); | |
+ return GDK_FILTER_REMOVE; | |
+ } | |
+ else if(ev->atom == atoms[AtomGo]) { | |
+ arg.v = getatom(c, AtomGo); | |
+ loaduri(c, &arg); | |
+ return GDK_FILTER_REMOVE; | |
} | |
- return GDK_FILTER_REMOVE; | |
} | |
} | |
return GDK_FILTER_CONTINUE; | |
t@@ -647,10 +648,9 @@ setcookie(SoupCookie *c) { | |
} | |
void | |
-setatom(Client *c, Atom a, const char *v) { | |
+setatom(Client *c, int a, const char *v) { | |
XSync(dpy, False); | |
- ignorexprop++; | |
- XChangeProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), a, | |
+ XChangeProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), atoms… | |
XA_STRING, 8, PropModeReplace, (unsigned char *)v, | |
strlen(v) + 1); | |
} | |
t@@ -670,8 +670,12 @@ setup(void) { | |
dpy = GDK_DISPLAY(); | |
s = webkit_get_default_session(); | |
- uriprop = XInternAtom(dpy, "_SURF_URI", False); | |
- findprop = XInternAtom(dpy, "_SURF_FIND", False); | |
+ | |
+ /* atoms */ | |
+ atoms[AtomFind] = XInternAtom(dpy, "_SURF_FIND", False); | |
+ atoms[AtomGo] = XInternAtom(dpy, "_SURF_GO", False); | |
+ atoms[AtomUri] = XInternAtom(dpy, "_SURF_URI", False); | |
+ atoms[AtomHiLight] = XInternAtom(dpy, "_SURF_HILIGHT", False); | |
/* dirs and files */ | |
cookiefile = buildpath(cookiefile); | |
t@@ -688,7 +692,6 @@ setup(void) { | |
if((proxy = getenv("http_proxy")) && strcmp(proxy, "")) { | |
new_proxy = g_strrstr(proxy, "http://") ? g_strdup(proxy) : | |
g_strdup_printf("http://%s", proxy); | |
- | |
puri = soup_uri_new(new_proxy); | |
g_object_set(G_OBJECT(s), "proxy-uri", puri, NULL); | |
soup_uri_free(puri); |