From: Daniel Carl Date: Fri, 8 Mar 2013 23:37:10 +0000 (+0100) Subject: Open hinted link via click event from JavaScript. X-Git-Url: https://git.owens.tech/rss.xml/rss.xml/git?a=commitdiff_plain;h=072d505f66d39dbef45bd857de67eaa71484e7ae;p=vimb.git Open hinted link via click event from JavaScript. If the link has no url source, we can't open it using the logic in the hint.c file. So we create the mouse event to open also links that have only JavaScript event listeners attached. --- diff --git a/src/hints.c b/src/hints.c index 8e4314e..cbe4801 100644 --- a/src/hints.c +++ b/src/hints.c @@ -64,7 +64,7 @@ void hints_clear(Client* c) void hints_create(Client* c, const char* input, guint mode, const guint prefixLength) { char* js = NULL; - char type; + char type, usage; if (CLEAN_MODE(c->state.mode) != VP_MODE_HINTING) { Style* style = &core.style; c->hints.prefixLength = prefixLength; @@ -92,7 +92,18 @@ void hints_create(Client* c, const char* input, guint mode, const guint prefixLe type = 'i'; } - js = g_strdup_printf("%s.create('%s', '%c');", HINT_VAR, input ? input : "", type); + if (mode & HINTS_PROCESS_OPEN) { + usage = mode & HINTS_OPEN_NEW ? 'T' : 'O'; + } else { + usage = 'U'; + } + + js = g_strdup_printf( + "%s.create('%s', '%c', '%c');", + HINT_VAR, + input ? input : "", type, + usage + ); hints_run_script(c, js); g_free(js); } @@ -143,11 +154,7 @@ static void hints_run_script(Client* c, char* js) hints_observe_input(c, FALSE); Arg a = {0}; char* v = (value + 5); - if (mode & HINTS_PROCESS_OPEN) { - a.s = v; - a.i = (mode & HINTS_OPEN_NEW) ? VP_TARGET_NEW : VP_TARGET_CURRENT; - command_open(c, &a); - } else if (mode & HINTS_PROCESS_INPUT) { + if (mode & HINTS_PROCESS_INPUT) { a.s = g_strconcat((mode & HINTS_OPEN_NEW) ? ":tabopen " : ":open ", v, NULL); command_input(c, &a); g_free(a.s); @@ -180,7 +187,7 @@ static void hints_observe_input(Client* c, gboolean observe) } else if (c->hints.change_handler && c->hints.keypress_handler) { g_signal_handler_disconnect(G_OBJECT(c->gui.inputbox), c->hints.change_handler); g_signal_handler_disconnect(G_OBJECT(c->gui.inputbox), c->hints.keypress_handler); - + c->hints.change_handler = c->hints.keypress_handler = 0; /* clear the input box - TODO move this to a better place */ diff --git a/src/hints.js b/src/hints.js index 325e6db..019c71a 100644 --- a/src/hints.js +++ b/src/hints.js @@ -14,12 +14,17 @@ VimpHints = function Hints(bg, bgf, fg, style) { var curFocusNum = 1; var hints = []; var mode; + /* O - open, T - open in new window, U - use source */ + var usage; - this.create = function(inputText, hintMode) + this.create = function(inputText, hintMode, resultUsage) { if (hintMode) { mode = hintMode; } + if (resultUsage) { + usage = resultUsage; + } var topwin = window; var top_height = topwin.innerHeight; @@ -219,9 +224,36 @@ VimpHints = function Hints(bg, bgf, fg, style) { return "DONE:"; } - return "DATA:" + _getSrc(el);; + switch (usage) { + case "T": _openNewWindow(el); return "DONE:"; + case "O": _open(el); return "DONE:"; + default: return "DATA:" + _getSrc(el); + } }; + /* opens given element */ + function _open(elem) + { + if (elem.target == "_blank") { + elem.removeAttribute("target"); + } + _mouseEvent(elem, "moudedown", 0); + _mouseEvent(elem, "click", 0); + } + + /* opens given element into new window */ + function _openNewWindow(elem) + { + var oldTarget = elem.target; + + /* set target to open in new window */ + elem.target = "_blank"; + _mouseEvent(elem, "moudedown"); + _mouseEvent(elem, "click"); + elem.target = oldTarget; + } + + /* set focus on hint with given number */ function _focus(n) {