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