commit 42c6c90366b7ce7708b13037a6ba819b08fbb20e
parent b9530ad5d1cd29e176c9f16b92f1983993b22049
Author: Quentin Rameau <quinq@fifth.space>
Date: Wed, 18 Nov 2015 17:59:50 +0100
Replace linkhover() with mousetargetchanged()
The “linkhover” can now be more than a simple link (image, video, etc.).
As we can't anymore perform a hit test when we want, we have to keep the
last known hit test to be able to know where the mouse is on the next
click event.
Diffstat:
surf.c | | | 35 | +++++++++++++++++++++++------------ |
1 file changed, 23 insertions(+), 12 deletions(-)
diff --git a/surf.c b/surf.c
@@ -59,7 +59,8 @@ typedef struct Client {
Window xid;
WebKitWebView *view;
WebKitWebInspector *inspector;
- const char *title, *linkhover;
+ WebKitHitTestResult *mousepos;
+ const char *title, *targeturi;
const char *needle;
gint progress;
struct Client *next;
@@ -151,8 +152,8 @@ static void inspector_finished(WebKitWebInspector *i, Client *c);
static gboolean keypress(GtkAccelGroup *group, GObject *obj, guint key,
GdkModifierType mods, Client *c);
-static void linkhover(WebKitWebView *v, const char* t, const char* l,
- Client *c);
+static void mousetargetchanged(WebKitWebView *v, WebKitHitTestResult *h,
+ guint modifiers, Client *c);
static void loadstatuschange(WebKitWebView *view, GParamSpec *pspec,
Client *c);
static void loaduri(Client *c, const Arg *arg);
@@ -691,14 +692,24 @@ keypress(GtkAccelGroup *group, GObject *obj, guint key, GdkModifierType mods,
}
void
-linkhover(WebKitWebView *v, const char* t, const char* l, Client *c)
+mousetargetchanged(WebKitWebView *v, WebKitHitTestResult *h, guint modifiers,
+ Client *c)
{
- if (l) {
- c->linkhover = copystr(&c->linkhover, l);
- } else if (c->linkhover) {
- free(c->linkhover);
- c->linkhover = NULL;
- }
+ WebKitHitTestResultContext hc;
+
+ /* Keep the hit test to know where is the pointer on the next click */
+ c->mousepos = h;
+
+ hc = webkit_hit_test_result_get_context(h);
+
+ if (hc & OnLink)
+ c->targeturi = webkit_hit_test_result_get_link_uri(h);
+ else if (hc & OnImg)
+ c->targeturi = webkit_hit_test_result_get_image_uri(h);
+ else if (hc & OnMedia)
+ c->targeturi = webkit_hit_test_result_get_media_uri(h);
+ else
+ c->targeturi = NULL;
updatetitle(c);
}
@@ -869,8 +880,8 @@ newview(Client *c, WebKitWebView *rv)
"notify::title",
G_CALLBACK(titlechanged), c);
g_signal_connect(G_OBJECT(v),
- "hovering-over-link",
- G_CALLBACK(linkhover), c);
+ "mouse-target-changed",
+ G_CALLBACK(mousetargetchanged), c);
g_signal_connect(G_OBJECT(v),
"geolocation-policy-decision-requested",
G_CALLBACK(geopolicyrequested), c);