diff options
author | Daniel Carl <danielcarl@gmx.de> | 2019-03-30 23:19:55 +0100 |
---|---|---|
committer | Daniel Carl <danielcarl@gmx.de> | 2019-03-30 23:19:55 +0100 |
commit | a58dcb6b4064a6c5befdb64bdc65069f26d6d0d4 (patch) | |
tree | 1dfc8b7d6819b5d0203f48974dc2a0ed081e78ab /src | |
parent | 6b07416d773e2b48c6904c3590222e01f0a66725 (diff) |
Change hover link url on status bar via direct function.
Do not emit fake signal to show the current hovered url from hinting
shown on the left of the statusbar. Instead call a function which writes
the url to the statusbar.
Diffstat (limited to 'src')
-rw-r--r-- | src/hints.c | 20 | ||||
-rw-r--r-- | src/main.c | 52 | ||||
-rw-r--r-- | src/main.h | 7 |
3 files changed, 48 insertions, 31 deletions
diff --git a/src/hints.c b/src/hints.c index d14db78..86c9135 100644 --- a/src/hints.c +++ b/src/hints.c @@ -306,7 +306,6 @@ static gboolean hint_function_check_result(Client *c, GVariant *return_value) { gboolean success = FALSE; char *value = NULL; - WebKitHitTestResult *hitresult; if (!return_value) { goto error; @@ -323,19 +322,10 @@ static gboolean hint_function_check_result(Client *c, GVariant *return_value) /* We get OVER:{I,A}:element-url so we use byte 6 to check for the * hinted element type image I or link A. */ if (*(value + 5) == 'I') { - hitresult = g_object_new(WEBKIT_TYPE_HIT_TEST_RESULT, - "context", WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE, - "image-uri", value + 7, - NULL); + vb_statusbar_show_hover_url(c, LINK_TYPE_IMAGE, value + 7); } else { - hitresult = g_object_new(WEBKIT_TYPE_HIT_TEST_RESULT, - "context", WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK, - "link-uri", value + 7, - NULL); + vb_statusbar_show_hover_url(c, LINK_TYPE_LINK, value + 7); } - g_signal_emit_by_name(c->webview, "mouse-target-changed", - WEBKIT_HIT_TEST_RESULT(hitresult), 0); - g_object_unref(hitresult); } else { goto error; } @@ -421,11 +411,7 @@ static gboolean hint_function_check_result(Client *c, GVariant *return_value) return TRUE; error: - hitresult = g_object_new(WEBKIT_TYPE_HIT_TEST_RESULT, - "context", WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT, - NULL); - g_signal_emit_by_name(c->webview, "mouse-target-changed", WEBKIT_HIT_TEST_RESULT(hitresult), 0); - g_object_unref(hitresult); + vb_statusbar_show_hover_url(c, LINK_TYPE_NONE, NULL); return FALSE; } @@ -639,6 +639,39 @@ void vb_statusbar_update(Client *c) } /** + * Show the given url on the left of statusbar. + */ +void vb_statusbar_show_hover_url(Client *c, VbLinkType type, const char *uri) +{ + char *sanitized_uri, + *msg; + const char *type_label; + + /* No uri given - show the current URI. */ + if (!uri || !*uri) { + update_urlbar(c); + return; + } + + switch (type) { + case LINK_TYPE_LINK: + type_label = "Link: "; + break; + case LINK_TYPE_IMAGE: + type_label = "Image: "; + break; + default: + return; + } + + sanitized_uri = util_sanitize_uri(uri); + msg = g_strconcat(type_label, uri, NULL); + gtk_label_set_text(GTK_LABEL(c->statusbar.left), msg); + g_free(msg); + g_free(sanitized_uri); +} + +/** * Destroys given client and removed it from client queue. If no client is * there in queue, quit the gtk main loop. */ @@ -1429,9 +1462,6 @@ static void on_webview_load_changed(WebKitWebView *webview, static void on_webview_mouse_target_changed(WebKitWebView *webview, WebKitHitTestResult *result, guint modifiers, Client *c) { - char *msg; - char *uri; - /* Save the hitTestResult to have this later available for events that * don't support this. */ if (c->state.hit_test_result) { @@ -1440,20 +1470,14 @@ static void on_webview_mouse_target_changed(WebKitWebView *webview, c->state.hit_test_result = g_object_ref(result); if (webkit_hit_test_result_context_is_link(result)) { - uri = util_sanitize_uri(webkit_hit_test_result_get_link_uri(result)); - msg = g_strconcat("Link: ", uri, NULL); - gtk_label_set_text(GTK_LABEL(c->statusbar.left), msg); - g_free(msg); - g_free(uri); + vb_statusbar_show_hover_url(c, LINK_TYPE_LINK, + webkit_hit_test_result_get_link_uri(result)); } else if (webkit_hit_test_result_context_is_image(result)) { - uri = util_sanitize_uri(webkit_hit_test_result_get_image_uri(result)); - msg = g_strconcat("Image: ", uri, NULL); - gtk_label_set_text(GTK_LABEL(c->statusbar.left), msg); - g_free(msg); - g_free(uri); + vb_statusbar_show_hover_url(c, LINK_TYPE_LINK, + webkit_hit_test_result_get_image_uri(result)); } else { /* No link under cursor - show the current URI. */ - update_urlbar(c); + vb_statusbar_show_hover_url(c, LINK_TYPE_NONE, NULL); } } @@ -116,6 +116,12 @@ enum { FILES_LAST }; +typedef enum { + LINK_TYPE_NONE, + LINK_TYPE_LINK, + LINK_TYPE_IMAGE, +} VbLinkType; + typedef struct Client Client; typedef struct State State; typedef struct Map Map; @@ -290,6 +296,7 @@ gboolean vb_quit(Client *c, gboolean force); void vb_register_add(Client *c, char buf, const char *value); const char *vb_register_get(Client *c, char buf); void vb_statusbar_update(Client *c); +void vb_statusbar_show_hover_url(Client *c, VbLinkType type, const char *uri); void vb_gui_style_update(Client *c, const char *name, const char *value); #endif /* end of include guard: _MAIN_H */ |