tallow buttonrelease customization in config.h - surf - customized build of sur… | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 29c2ab207afe24c48aaadaf3d2b60390eed4ce6a | |
parent f7e358280cb3bda1f8c46ca021fe94b59a984f5d | |
Author: Markus Teich <[email protected]> | |
Date: Wed, 28 Jan 2015 21:01:55 +0100 | |
allow buttonrelease customization in config.h | |
Signed-off-by: Christoph Lohmann <[email protected]> | |
Diffstat: | |
M config.def.h | 10 ++++++++++ | |
M surf.c | 46 +++++++++++++++++++++++++----… | |
2 files changed, 48 insertions(+), 8 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -127,3 +127,13 @@ static Key keys[] = { | |
{ 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 } }, | |
+}; | |
diff --git a/surf.c b/surf.c | |
t@@ -35,6 +35,15 @@ char *argv0; | |
#define COOKIEJAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COOKIEJAR_… | |
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; | |
union Arg { | |
t@@ -62,6 +71,14 @@ typedef struct { | |
} Key; | |
typedef struct { | |
+ unsigned int click; | |
+ unsigned int mask; | |
+ guint button; | |
+ void (*func)(Client *c, const Arg *arg); | |
+ const Arg arg; | |
+} Button; | |
+ | |
+typedef struct { | |
SoupCookieJarText parent_instance; | |
int lock; | |
} CookieJar; | |
t@@ -97,8 +114,7 @@ static void beforerequest(WebKitWebView *w, WebKitWebFrame … | |
WebKitWebResource *r, WebKitNetworkRequest *req, | |
WebKitNetworkResponse *resp, Client *c); | |
static char *buildpath(const char *path); | |
-static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, | |
- GList *gl); | |
+static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, Client *c… | |
static void cleanup(void); | |
static void clipboard(Client *c, const Arg *arg); | |
t@@ -168,6 +184,8 @@ static void print(Client *c, const Arg *arg); | |
static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, | |
gpointer d); | |
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 scroll_h(Client *c, const Arg *arg); | |
static void scroll_v(Client *c, const Arg *arg); | |
t@@ -273,18 +291,20 @@ buildpath(const char *path) { | |
} | |
static gboolean | |
-buttonrelease(WebKitWebView *web, GdkEventButton *e, GList *gl) { | |
+buttonrelease(WebKitWebView *web, GdkEventButton *e, Client *c) { | |
WebKitHitTestResultContext context; | |
WebKitHitTestResult *result = webkit_web_view_get_hit_test_result(web, | |
e); | |
Arg arg; | |
+ unsigned int i; | |
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) == CLEA… | |
- g_object_get(result, "link-uri", &arg.v, NULL); | |
- newwindow(NULL, &arg, e->state & GDK_CONTROL_MASK); | |
+ g_object_get(result, "link-uri", &arg.v, NULL); | |
+ printf("%d %d\n", context, e->button); | |
+ for(i = 0; i < LENGTH(buttons); i++) { | |
+ if(context & buttons[i].click && e->button == buttons[i].butto… | |
+ CLEANMASK(e->state) == CLEANMASK(buttons[i].mask) && buttons[i… | |
+ buttons[i].func(c, buttons[i].click == ClkLink && butt… | |
return true; | |
} | |
} | |
t@@ -1119,6 +1139,16 @@ progresschange(WebKitWebView *view, GParamSpec *pspec, … | |
} | |
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 | |
reload(Client *c, const Arg *arg) { | |
gboolean nocache = *(gboolean *)arg; | |
if(nocache) { |