ext: get the right DOM on msg
When navigating history, the document-loaded signal isn't triggered and we can't directly get back the previous webview, so we have no other choice than to look it up everytime a new message is received.
This commit is contained in:
parent
1901359efa
commit
660413256f
1 changed files with 7 additions and 15 deletions
|
@ -15,7 +15,6 @@
|
|||
typedef struct Page {
|
||||
guint64 id;
|
||||
WebKitWebPage *webpage;
|
||||
WebKitDOMDOMWindow *view;
|
||||
struct Page *next;
|
||||
} Page;
|
||||
|
||||
|
@ -63,6 +62,7 @@ readpipe(GIOChannel *s, GIOCondition c, gpointer unused)
|
|||
{
|
||||
char msg[MSGBUFSZ];
|
||||
gsize msgsz;
|
||||
WebKitDOMDOMWindow *view;
|
||||
GError *gerr = NULL;
|
||||
glong wh, ww;
|
||||
Page *p;
|
||||
|
@ -80,18 +80,19 @@ readpipe(GIOChannel *s, GIOCondition c, gpointer unused)
|
|||
if (p->id == msg[0])
|
||||
break;
|
||||
}
|
||||
if (!p || !p->view)
|
||||
if (!p || !(view = webkit_dom_document_get_default_view(
|
||||
webkit_web_page_get_dom_document(p->webpage))))
|
||||
return TRUE;
|
||||
|
||||
switch (msg[1]) {
|
||||
case 'h':
|
||||
ww = webkit_dom_dom_window_get_inner_width(p->view);
|
||||
webkit_dom_dom_window_scroll_by(p->view,
|
||||
ww = webkit_dom_dom_window_get_inner_width(view);
|
||||
webkit_dom_dom_window_scroll_by(view,
|
||||
(ww / 100) * msg[2], 0);
|
||||
break;
|
||||
case 'v':
|
||||
wh = webkit_dom_dom_window_get_inner_height(p->view);
|
||||
webkit_dom_dom_window_scroll_by(p->view,
|
||||
wh = webkit_dom_dom_window_get_inner_height(view);
|
||||
webkit_dom_dom_window_scroll_by(view,
|
||||
0, (wh / 100) * msg[2]);
|
||||
break;
|
||||
}
|
||||
|
@ -99,19 +100,10 @@ readpipe(GIOChannel *s, GIOCondition c, gpointer unused)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
documentloaded(WebKitWebPage *wp, Page *p)
|
||||
{
|
||||
p->view = webkit_dom_document_get_default_view(
|
||||
webkit_web_page_get_dom_document(wp));
|
||||
}
|
||||
|
||||
static void
|
||||
webpagecreated(WebKitWebExtension *e, WebKitWebPage *wp, gpointer unused)
|
||||
{
|
||||
Page *p = newpage(wp);
|
||||
|
||||
g_signal_connect(wp, "document-loaded", G_CALLBACK(documentloaded), p);
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
|
|
Loading…
Reference in a new issue