[webkit-dev] pywebkitgtk - adding DOM javascript executing and evaluation; next step, addEventListener etc.
Luke Kenneth Casson Leighton
lkcl at lkcl.net
Wed Aug 20 08:07:48 PDT 2008
http://code.google.com/p/pywebkitgtk/issues/detail?id=12
as part of the experiment to get pyjamas ported to webkit, the first step -
pending proper (direct) DOM manipulation, with direct functions such as
document.createElement(), document.getElementById(), addChild and... well.. .
everything, really - the first step is to add javascript execution and
evaluation.
thanks to kalikiana's help, pointing me in the direction of gjs.[ch], that
has taken only about three hours to complete.
the next stage is slightly more hair-raising, and, rather than put in
some god-awful hack based on cut/paste of e.g. console.error(), calling
it pyjamas.awfulnotificationhackfunctionforgenericinsanepurposes() and
liberally sprinkling the javascript to be executed with calls to this
function - at every single event that is required to be notified back
into python code - i'd rather give the "proper way to do it" a chance.
i notice for example in WebKit/gtk/webkit/webkitwebview.cpp that there
are already perfectly good callbacks such as webViewClass->console_message
and widgetClass->key_press_event - i think that's perfect (maybe)
especially the key_press_event ones.
however - i need eeevverryyything. "addEventListener()" seems like the
logical function to hook into :) no - not "hook into" as in via
javascript - "hook into" as in "add a gtk signal called
'javascript-event-listener' which someone in a gtk app can connect()
to. and likewise for QT. and likewise for wxWidgets.
so:
* is _every_ javascript event covered by those callbacks, e.g.
widgetClass->key_press_event?
here's a hint of the list:
element.onclick = (bits & 0x00001) ? $wnd.__dispatchEvent : null;
element.ondblclick = (bits & 0x00002) ? $wnd.__dispatchEvent : null;
element.onmousedown = (bits & 0x00004) ? $wnd.__dispatchEvent : null;
element.onmouseup = (bits & 0x00008) ? $wnd.__dispatchEvent : null;
element.onmouseover = (bits & 0x00010) ? $wnd.__dispatchEvent : null;
element.onmouseout = (bits & 0x00020) ? $wnd.__dispatchEvent : null;
element.onmousemove = (bits & 0x00040) ? $wnd.__dispatchEvent : null;
element.onkeydown = (bits & 0x00080) ? $wnd.__dispatchEvent : null;
element.onkeypress = (bits & 0x00100) ? $wnd.__dispatchEvent : null;
element.onkeyup = (bits & 0x00200) ? $wnd.__dispatchEvent : null;
element.onchange = (bits & 0x00400) ? $wnd.__dispatchEvent : null;
element.onfocus = (bits & 0x00800) ? $wnd.__dispatchEvent : null;
element.onblur = (bits & 0x01000) ? $wnd.__dispatchEvent : null;
element.onlosecapture = (bits & 0x02000) ? $wnd.__dispatchEvent : null;
element.onscroll = (bits & 0x04000) ? $wnd.__dispatchEvent : null;
element.onload = (bits & 0x08000) ? $wnd.__dispatchEvent : null;
element.onerror = (bits & 0x10000) ? $wnd.__dispatchEvent : null;
* can i access and change cancelBubble, call event.stopPropagation()
and event.preventDefault() from the gtk event functions or am i
really going to have to bite the bullet and add a python wrapper around
the Event class (when i find it), and add my own addEventListener
(when i find the right places) with its corresponding qt/gtk etc.
callback?
this is slightly mind-bending even by my standards.
some sort of pointers along the right lines, e.g. "yes, go for it, by
all means add an insane c-based callback into every addEventListener
you can find", or "no, you fooool, that's been done already, *slap*
use this", or "no, fooool, that's already been planned and designed"
would be greatly appreciated.
ideas, anyone?
l.
More information about the webkit-dev
mailing list