Introduction
Introduction Statistics Contact Development Disclaimer Help
twebext-surf.c - surf - [fork] customized build of surf, the suckless webkit br…
git clone git://src.adamsgaard.dk/surf
Log
Files
Refs
README
LICENSE
---
twebext-surf.c (2472B)
---
1 #include <sys/socket.h>
2 #include <sys/stat.h>
3 #include <fcntl.h>
4 #include <inttypes.h>
5 #include <limits.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8
9 #include <gio/gio.h>
10 #include <webkit2/webkit-web-extension.h>
11 #include <webkitdom/webkitdom.h>
12 #include <webkitdom/WebKitDOMDOMWindowUnstable.h>
13
14 #include "common.h"
15
16 #define LENGTH(x) (sizeof(x) / sizeof(x[0]))
17
18 static WebKitWebExtension *webext;
19 static int sock;
20
21 static void
22 msgsurf(guint64 pageid, const char *s)
23 {
24 static char msg[MSGBUFSZ];
25 size_t sln = strlen(s);
26 int ret;
27
28 if ((ret = snprintf(msg, sizeof(msg), "%c%s", pageid, s))
29 >= sizeof(msg)) {
30 fprintf(stderr, "webext: msg: message too long: %d\n", r…
31 return;
32 }
33
34 if (send(sock, msg, ret, 0) < 0)
35 fprintf(stderr, "webext: error sending: %s\n", msg+1);
36 }
37
38 static gboolean
39 readsock(GIOChannel *s, GIOCondition c, gpointer unused)
40 {
41 static char js[48], msg[MSGBUFSZ];
42 WebKitWebPage *page;
43 JSCContext *jsc;
44 GError *gerr = NULL;
45 gsize msgsz;
46
47 if (g_io_channel_read_chars(s, msg, sizeof(msg), &msgsz, &gerr) …
48 G_IO_STATUS_NORMAL) {
49 if (gerr) {
50 fprintf(stderr, "webext: error reading socket: %…
51 gerr->message);
52 g_error_free(gerr);
53 }
54 return TRUE;
55 }
56
57 if (msgsz < 2) {
58 fprintf(stderr, "webext: readsock: message too short: %d…
59 msgsz);
60 return TRUE;
61 }
62
63 if (!(page = webkit_web_extension_get_page(webext, msg[0])))
64 return TRUE;
65
66 jsc = webkit_frame_get_js_context(webkit_web_page_get_main_frame…
67
68 switch (msg[1]) {
69 case 'h':
70 if (msgsz != 3)
71 return TRUE;
72 snprintf(js, sizeof(js),
73 "window.scrollBy(window.innerWidth/100*%d,0);",
74 msg[2]);
75 jsc_context_evaluate(jsc, js, -1);
76 break;
77 case 'v':
78 if (msgsz != 3)
79 return TRUE;
80 snprintf(js, sizeof(js),
81 "window.scrollBy(0,window.innerHeight/100*%d);",
82 msg[2]);
83 jsc_context_evaluate(jsc, js, -1);
84 break;
85 }
86
87 return TRUE;
88 }
89
90 G_MODULE_EXPORT void
91 webkit_web_extension_initialize_with_user_data(WebKitWebExtension *e,
92 const GVariant *gv)
93 {
94 GIOChannel *gchansock;
95
96 webext = e;
97
98 g_variant_get(gv, "i", &sock);
99
100 gchansock = g_io_channel_unix_new(sock);
101 g_io_channel_set_encoding(gchansock, NULL, NULL);
102 g_io_channel_set_flags(gchansock, g_io_channel_get_flags(gchanso…
103 | G_IO_FLAG_NONBLOCK, NULL);
104 g_io_channel_set_close_on_unref(gchansock, TRUE);
105 g_io_add_watch(gchansock, G_IO_IN, readsock, NULL);
106 }
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.