allow buttonrelease customization in config.h
Signed-off-by: Christoph Lohmann <20h@r-36.net>
This commit is contained in:
parent
f7e358280c
commit
29c2ab207a
10
config.def.h
10
config.def.h
|
@ -127,3 +127,13 @@ static Key keys[] = {
|
||||||
{ MODKEY|GDK_SHIFT_MASK,GDK_g, togglegeolocation, { 0 } },
|
{ MODKEY|GDK_SHIFT_MASK,GDK_g, togglegeolocation, { 0 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* button definitions */
|
||||||
|
/* click can be ClkDoc, ClkLink, ClkImg, ClkMedia, ClkSel, ClkEdit, ClkAny */
|
||||||
|
static Button buttons[] = {
|
||||||
|
/* click event mask button function argument */
|
||||||
|
{ ClkLink, 0, 2, linkopenembed, { 0 } },
|
||||||
|
{ ClkLink, MODKEY, 2, linkopen, { 0 } },
|
||||||
|
{ ClkLink, MODKEY, 1, linkopen, { 0 } },
|
||||||
|
{ ClkAny, 0, 8, navigate, { .i = -1 } },
|
||||||
|
{ ClkAny, 0, 9, navigate, { .i = +1 } },
|
||||||
|
};
|
||||||
|
|
44
surf.c
44
surf.c
|
@ -35,6 +35,15 @@ char *argv0;
|
||||||
#define COOKIEJAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COOKIEJAR_TYPE, CookieJar))
|
#define COOKIEJAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COOKIEJAR_TYPE, CookieJar))
|
||||||
|
|
||||||
enum { AtomFind, AtomGo, AtomUri, AtomLast };
|
enum { AtomFind, AtomGo, AtomUri, AtomLast };
|
||||||
|
enum {
|
||||||
|
ClkDoc = WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT,
|
||||||
|
ClkLink = WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK,
|
||||||
|
ClkImg = WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE,
|
||||||
|
ClkMedia = WEBKIT_HIT_TEST_RESULT_CONTEXT_MEDIA,
|
||||||
|
ClkSel = WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION,
|
||||||
|
ClkEdit = WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE,
|
||||||
|
ClkAny = ClkDoc | ClkLink | ClkImg | ClkMedia | ClkSel | ClkEdit,
|
||||||
|
};
|
||||||
|
|
||||||
typedef union Arg Arg;
|
typedef union Arg Arg;
|
||||||
union Arg {
|
union Arg {
|
||||||
|
@ -61,6 +70,14 @@ typedef struct {
|
||||||
const Arg arg;
|
const Arg arg;
|
||||||
} Key;
|
} Key;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned int click;
|
||||||
|
unsigned int mask;
|
||||||
|
guint button;
|
||||||
|
void (*func)(Client *c, const Arg *arg);
|
||||||
|
const Arg arg;
|
||||||
|
} Button;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SoupCookieJarText parent_instance;
|
SoupCookieJarText parent_instance;
|
||||||
int lock;
|
int lock;
|
||||||
|
@ -97,8 +114,7 @@ static void beforerequest(WebKitWebView *w, WebKitWebFrame *f,
|
||||||
WebKitWebResource *r, WebKitNetworkRequest *req,
|
WebKitWebResource *r, WebKitNetworkRequest *req,
|
||||||
WebKitNetworkResponse *resp, Client *c);
|
WebKitNetworkResponse *resp, Client *c);
|
||||||
static char *buildpath(const char *path);
|
static char *buildpath(const char *path);
|
||||||
static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e,
|
static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, Client *c);
|
||||||
GList *gl);
|
|
||||||
static void cleanup(void);
|
static void cleanup(void);
|
||||||
static void clipboard(Client *c, const Arg *arg);
|
static void clipboard(Client *c, const Arg *arg);
|
||||||
|
|
||||||
|
@ -168,6 +184,8 @@ static void print(Client *c, const Arg *arg);
|
||||||
static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event,
|
static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event,
|
||||||
gpointer d);
|
gpointer d);
|
||||||
static void progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c);
|
static void progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c);
|
||||||
|
static void linkopen(Client *c, const Arg *arg);
|
||||||
|
static void linkopenembed(Client *c, const Arg *arg);
|
||||||
static void reload(Client *c, const Arg *arg);
|
static void reload(Client *c, const Arg *arg);
|
||||||
static void scroll_h(Client *c, const Arg *arg);
|
static void scroll_h(Client *c, const Arg *arg);
|
||||||
static void scroll_v(Client *c, const Arg *arg);
|
static void scroll_v(Client *c, const Arg *arg);
|
||||||
|
@ -273,18 +291,20 @@ buildpath(const char *path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
buttonrelease(WebKitWebView *web, GdkEventButton *e, GList *gl) {
|
buttonrelease(WebKitWebView *web, GdkEventButton *e, Client *c) {
|
||||||
WebKitHitTestResultContext context;
|
WebKitHitTestResultContext context;
|
||||||
WebKitHitTestResult *result = webkit_web_view_get_hit_test_result(web,
|
WebKitHitTestResult *result = webkit_web_view_get_hit_test_result(web,
|
||||||
e);
|
e);
|
||||||
Arg arg;
|
Arg arg;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
g_object_get(result, "context", &context, NULL);
|
g_object_get(result, "context", &context, NULL);
|
||||||
if(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) {
|
|
||||||
if(e->button == 2 ||
|
|
||||||
(e->button == 1 && CLEANMASK(e->state) == CLEANMASK(MODKEY))) {
|
|
||||||
g_object_get(result, "link-uri", &arg.v, NULL);
|
g_object_get(result, "link-uri", &arg.v, NULL);
|
||||||
newwindow(NULL, &arg, e->state & GDK_CONTROL_MASK);
|
printf("%d %d\n", context, e->button);
|
||||||
|
for(i = 0; i < LENGTH(buttons); i++) {
|
||||||
|
if(context & buttons[i].click && e->button == buttons[i].button &&
|
||||||
|
CLEANMASK(e->state) == CLEANMASK(buttons[i].mask) && buttons[i].func) {
|
||||||
|
buttons[i].func(c, buttons[i].click == ClkLink && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1118,6 +1138,16 @@ progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c) {
|
||||||
updatetitle(c);
|
updatetitle(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
linkopen(Client *c, const Arg *arg) {
|
||||||
|
newwindow(NULL, arg, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
linkopenembed(Client *c, const Arg *arg) {
|
||||||
|
newwindow(NULL, arg, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reload(Client *c, const Arg *arg) {
|
reload(Client *c, const Arg *arg) {
|
||||||
gboolean nocache = *(gboolean *)arg;
|
gboolean nocache = *(gboolean *)arg;
|
||||||
|
|
Loading…
Reference in New Issue