Introduction
Introduction Statistics Contact Development Disclaimer Help
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) {
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.