iallow buttonrelease customization in config.h - surf - Surf web browser. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1Log /scm/surf//log.gph gopher.r-36.net 70 1Files /scm/surf//files.gph gopher.r-36.net 70 1Refs /scm/surf//refs.gph gopher.r-36.net 70 1README /scm/surf//file/README.gph gopher.r-36.net 70 1LICENSE /scm/surf//file/LICENSE.gph gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1commit 29c2ab207afe24c48aaadaf3d2b60390eed4ce6a /scm/surf//commit/29c2ab207afe24c48aaadaf3d2b60390eed4ce6a.gph gopher.r-36.net 70 1parent f7e358280cb3bda1f8c46ca021fe94b59a984f5d /scm/surf//commit/f7e358280cb3bda1f8c46ca021fe94b59a984f5d.gph gopher.r-36.net 70 hAuthor: Markus Teich URL:mailto:markus.teich@stusta.mhn.de gopher.r-36.net 70 iDate: Wed, 28 Jan 2015 21:01:55 +0100 Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iallow buttonrelease customization in config.h Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDiffstat: Err gopher.r-36.net 70 i config.def.h | 10 ++++++++++ Err gopher.r-36.net 70 i surf.c | 46 +++++++++++++++++++++++++------ Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i2 files changed, 48 insertions(+), 8 deletions(-) Err gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1diff --git a/config.def.h b/config.def.h /scm/surf//file/config.def.h.gph gopher.r-36.net 70 i@@ -127,3 +127,13 @@ static Key keys[] = { Err gopher.r-36.net 70 i { MODKEY|GDK_SHIFT_MASK,GDK_g, togglegeolocation, { 0 } }, Err gopher.r-36.net 70 i }; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+/* button definitions */ Err gopher.r-36.net 70 i+/* click can be ClkDoc, ClkLink, ClkImg, ClkMedia, ClkSel, ClkEdit, ClkAny */ Err gopher.r-36.net 70 i+static Button buttons[] = { Err gopher.r-36.net 70 i+ /* click event mask button function argument */ Err gopher.r-36.net 70 i+ { ClkLink, 0, 2, linkopenembed, { 0 } }, Err gopher.r-36.net 70 i+ { ClkLink, MODKEY, 2, linkopen, { 0 } }, Err gopher.r-36.net 70 i+ { ClkLink, MODKEY, 1, linkopen, { 0 } }, Err gopher.r-36.net 70 i+ { ClkAny, 0, 8, navigate, { .i = -1 } }, Err gopher.r-36.net 70 i+ { ClkAny, 0, 9, navigate, { .i = +1 } }, Err gopher.r-36.net 70 i+}; Err gopher.r-36.net 70 1diff --git a/surf.c b/surf.c /scm/surf//file/surf.c.gph gopher.r-36.net 70 i@@ -35,6 +35,15 @@ char *argv0; Err gopher.r-36.net 70 i #define COOKIEJAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COOKIEJAR_TYPE, CookieJar)) Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i enum { AtomFind, AtomGo, AtomUri, AtomLast }; Err gopher.r-36.net 70 i+enum { Err gopher.r-36.net 70 i+ ClkDoc = WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT, Err gopher.r-36.net 70 i+ ClkLink = WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK, Err gopher.r-36.net 70 i+ ClkImg = WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE, Err gopher.r-36.net 70 i+ ClkMedia = WEBKIT_HIT_TEST_RESULT_CONTEXT_MEDIA, Err gopher.r-36.net 70 i+ ClkSel = WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION, Err gopher.r-36.net 70 i+ ClkEdit = WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE, Err gopher.r-36.net 70 i+ ClkAny = ClkDoc | ClkLink | ClkImg | ClkMedia | ClkSel | ClkEdit, Err gopher.r-36.net 70 i+}; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i ttypedef union Arg Arg; Err gopher.r-36.net 70 i union Arg { Err gopher.r-36.net 70 i@@ -62,6 +71,14 @@ typedef struct { Err gopher.r-36.net 70 i } Key; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i ttypedef struct { Err gopher.r-36.net 70 i+ unsigned int click; Err gopher.r-36.net 70 i+ unsigned int mask; Err gopher.r-36.net 70 i+ guint button; Err gopher.r-36.net 70 i+ void (*func)(Client *c, const Arg *arg); Err gopher.r-36.net 70 i+ const Arg arg; Err gopher.r-36.net 70 i+} Button; Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ttypedef struct { Err gopher.r-36.net 70 i SoupCookieJarText parent_instance; Err gopher.r-36.net 70 i int lock; Err gopher.r-36.net 70 i } CookieJar; Err gopher.r-36.net 70 i@@ -97,8 +114,7 @@ static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, Err gopher.r-36.net 70 i WebKitWebResource *r, WebKitNetworkRequest *req, Err gopher.r-36.net 70 i WebKitNetworkResponse *resp, Client *c); Err gopher.r-36.net 70 i static char *buildpath(const char *path); Err gopher.r-36.net 70 i-static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, Err gopher.r-36.net 70 i- GList *gl); Err gopher.r-36.net 70 i+static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, Client *c); Err gopher.r-36.net 70 i static void cleanup(void); Err gopher.r-36.net 70 i static void clipboard(Client *c, const Arg *arg); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i@@ -168,6 +184,8 @@ static void print(Client *c, const Arg *arg); Err gopher.r-36.net 70 i static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, Err gopher.r-36.net 70 i gpointer d); Err gopher.r-36.net 70 i static void progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c); Err gopher.r-36.net 70 i+static void linkopen(Client *c, const Arg *arg); Err gopher.r-36.net 70 i+static void linkopenembed(Client *c, const Arg *arg); Err gopher.r-36.net 70 i static void reload(Client *c, const Arg *arg); Err gopher.r-36.net 70 i static void scroll_h(Client *c, const Arg *arg); Err gopher.r-36.net 70 i static void scroll_v(Client *c, const Arg *arg); Err gopher.r-36.net 70 i@@ -273,18 +291,20 @@ buildpath(const char *path) { Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i static gboolean Err gopher.r-36.net 70 i-buttonrelease(WebKitWebView *web, GdkEventButton *e, GList *gl) { Err gopher.r-36.net 70 i+buttonrelease(WebKitWebView *web, GdkEventButton *e, Client *c) { Err gopher.r-36.net 70 i WebKitHitTestResultContext context; Err gopher.r-36.net 70 i WebKitHitTestResult *result = webkit_web_view_get_hit_test_result(web, Err gopher.r-36.net 70 i e); Err gopher.r-36.net 70 i Arg arg; Err gopher.r-36.net 70 i+ unsigned int i; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i g_object_get(result, "context", &context, NULL); Err gopher.r-36.net 70 i- if(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { Err gopher.r-36.net 70 i- if(e->button == 2 || Err gopher.r-36.net 70 i- (e->button == 1 && CLEANMASK(e->state) == CLEANMASK(MODKEY))) { Err gopher.r-36.net 70 i- g_object_get(result, "link-uri", &arg.v, NULL); Err gopher.r-36.net 70 i- newwindow(NULL, &arg, e->state & GDK_CONTROL_MASK); Err gopher.r-36.net 70 i+ g_object_get(result, "link-uri", &arg.v, NULL); Err gopher.r-36.net 70 i+ printf("%d %d\n", context, e->button); Err gopher.r-36.net 70 i+ for(i = 0; i < LENGTH(buttons); i++) { Err gopher.r-36.net 70 i+ if(context & buttons[i].click && e->button == buttons[i].button && Err gopher.r-36.net 70 i+ CLEANMASK(e->state) == CLEANMASK(buttons[i].mask) && buttons[i].func) { Err gopher.r-36.net 70 i+ buttons[i].func(c, buttons[i].click == ClkLink && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); Err gopher.r-36.net 70 i return true; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i@@ -1119,6 +1139,16 @@ progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c) { Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i static void Err gopher.r-36.net 70 i+linkopen(Client *c, const Arg *arg) { Err gopher.r-36.net 70 i+ newwindow(NULL, arg, 1); Err gopher.r-36.net 70 i+} Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+static void Err gopher.r-36.net 70 i+linkopenembed(Client *c, const Arg *arg) { Err gopher.r-36.net 70 i+ newwindow(NULL, arg, 0); Err gopher.r-36.net 70 i+} Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+static void Err gopher.r-36.net 70 i reload(Client *c, const Arg *arg) { Err gopher.r-36.net 70 i gboolean nocache = *(gboolean *)arg; Err gopher.r-36.net 70 i if(nocache) { Err gopher.r-36.net 70 .