Desplazando una ventana de WebKit2.Webkit en GTK + 3

¿Cómo se desplaza uno un widget webkit2gtk ?

En webkitgtk (aka. webkit1 ) envuelve su WebView en un ScrolledWindow , por lo que puede usar su propiedad vadjustment .

Para wekit2gtk , esta llamada en el WebView simplemente devuelve None , y no veo ningún otro método para llamar.

Como explicación, quiero agregar soporte táctil a webkit2 . Me he abierto camino en esto agregando una capa transparente sobre el widget de WebView ¹, pero ahora estoy detectando toques que parece que no puedo usar.

¹ Un lanzamiento que salió hoy eliminó la necesidad de la capa en la parte superior. Sin embargo, tengo toques y nada puedo hacer con ellos.

La separación de procesos en WebKit2 tiene algunas ventajas, pero también hace que muchas cosas sean más complejas. Creo que el desplazamiento es una de esas cosas: ocurre en el proceso web porque las barras de desplazamiento ahora son manejadas por webkit, y no por el widget Gtk. Lo mismo debería valer para el manejo táctil: se realiza en parte en el proceso web. Carlos García Campos ha escrito una publicación de blog sobre el uso de WebKitWebExtension para ayudar en esto. Tenga en cuenta que el diseño también tiene muchas implicaciones en su código: parte del código se ejecutará en un proceso totalmente diferente.

El rest de la respuesta no se ha probado, por favor considere esto más como una suposición educada:

Creo que la forma de controlar el desplazamiento es a través de la API DOM , más específicamente las funciones DOMDOMWindow.scroll* . La parte compleja es obtener una referencia a la DOMDOMWindow : deberá implementar una WebExtension web que se ejecutará en el proceso web y le permitirá recibir notificaciones cuando se cree una WebPage web. La llamada WebPage.get_dom_document() le proporciona un DOMDocument y DOMDocument.get_default_view() debe proporcionar la DOMDOMWindow que necesita.

Para la documentación de la API DOM, Mozilla es probablemente una referencia mejor que la documentación espartana de WebKit-GTK-DOM.

Si estuviera haciendo lo que está intentando hacer, mi primera parada sería el canal # webkitgtk + IRC en Freenode para comprobar si lo anterior es realmente una forma sensata de hacer lo que quiere …

Podrías ejecutar algún javascript para desplazarte por la página. La API de C tiene la función webkit_web_view_run_javascript() para que puedas alimentarlo con algún javascript como

 window.scrollTo(500,0); 

y la página debería desplazarse.