Add eval() function for executing Javascript.  Handy for keybindings. - surf - Surf web browser.
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 2e62372969239285705504187b0211039b5ae619
 (DIR) parent 3b104416d350f25db098d6c8dc9ddff11311e065
 (HTM) Author: Troels Henriksen <athas@sigkill.dk>
       Date:   Thu,  3 Nov 2011 14:09:19 +0100
       
       Add eval() function for executing Javascript.  Handy for keybindings.
       Diffstat:
         surf.c                              |      26 +++++++++++++++++++++-----
       
       1 file changed, 21 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/surf.c b/surf.c
       @@ -102,6 +102,7 @@ static void setup(void);
        static void sigchld(int unused);
        static void source(Client *c, const Arg *arg);
        static void spawn(Client *c, const Arg *arg);
       +static void eval(Client *c, const Arg *arg);
        static void stop(Client *c, const Arg *arg);
        static void titlechange(WebKitWebView *v, WebKitWebFrame* frame, const char* title, Client *c);
        static void update(Client *c);
       @@ -144,15 +145,24 @@ cleanup(void) {
        }
        
        void
       +evalscript(WebKitWebFrame *frame, JSContextRef js, char *script, char* scriptname) {
       +        JSStringRef jsscript, jsscriptname;
       +        JSValueRef exception = NULL;
       +
       +        jsscript = JSStringCreateWithUTF8CString(script);
       +        jsscriptname = JSStringCreateWithUTF8CString(scriptname);
       +        JSEvaluateScript(js, jsscript, JSContextGetGlobalObject(js), jsscriptname, 0, &exception);
       +        JSStringRelease(jsscript);
       +        JSStringRelease(jsscriptname);
       +}
       +
       +void
        runscript(WebKitWebFrame *frame, JSContextRef js) {
       -        JSStringRef jsscript;
                char *script;
       -        JSValueRef exception = NULL;
                GError *error;
       -        
       +
                if(g_file_get_contents(scriptfile, &script, NULL, &error)) {
       -                jsscript = JSStringCreateWithUTF8CString(script);
       -                JSEvaluateScript(js, jsscript, JSContextGetGlobalObject(js), NULL, 0, &exception);
       +                evalscript(frame, webkit_web_frame_get_global_context(frame), script, scriptfile);
                }
        }
        
       @@ -740,6 +750,12 @@ spawn(Client *c, const Arg *arg) {
        }
        
        void
       +eval(Client *c, const Arg *arg) {
       +        WebKitWebFrame *frame = webkit_web_view_get_main_frame(c->view);
       +        evalscript(frame, webkit_web_frame_get_global_context(frame), ((char **)arg->v)[0], "");
       +}
       +
       +void
        stop(Client *c, const Arg *arg) {
                webkit_web_view_stop_loading(c->view);
        }