QtWebEngine: Make :open-editor work

This commit is contained in:
Florian Bruhin 2016-08-09 16:00:59 +02:00
parent ca67e2be3c
commit fefea4944a
4 changed files with 11 additions and 7 deletions

View File

@ -1424,8 +1424,7 @@ class CommandDispatcher:
ed.edit(text) ed.edit(text)
@cmdutils.register(instance='command-dispatcher', @cmdutils.register(instance='command-dispatcher',
modes=[KeyMode.insert], hide=True, scope='window', modes=[KeyMode.insert], hide=True, scope='window')
backend=usertypes.Backend.QtWebKit)
def open_editor(self): def open_editor(self):
"""Open an external editor with the currently selected form field. """Open an external editor with the currently selected form field.

View File

@ -24,7 +24,7 @@
from PyQt5.QtCore import QRect from PyQt5.QtCore import QRect
from qutebrowser.utils import log from qutebrowser.utils import log, javascript
from qutebrowser.browser import webelem from qutebrowser.browser import webelem
@ -32,9 +32,10 @@ class WebEngineElement(webelem.AbstractWebElement):
"""A web element for QtWebEngine, using JS under the hood.""" """A web element for QtWebEngine, using JS under the hood."""
def __init__(self, js_dict): def __init__(self, js_dict, run_js_callable):
self._id = js_dict['id'] self._id = js_dict['id']
self._js_dict = js_dict self._js_dict = js_dict
self._run_js = run_js_callable
def __eq__(self, other): def __eq__(self, other):
if not isinstance(other, WebEngineElement): if not isinstance(other, WebEngineElement):
@ -117,7 +118,8 @@ class WebEngineElement(webelem.AbstractWebElement):
content-editable. content-editable.
""" """
# FIXME:qtwebengine what to do about use_js with WebEngine? # FIXME:qtwebengine what to do about use_js with WebEngine?
log.stub() js_code = javascript.assemble('webelem', 'set_text', self._id, text)
self._run_js(js_code)
def set_inner_xml(self, xml): def set_inner_xml(self, xml):
"""Set the given inner XML.""" """Set the given inner XML."""

View File

@ -446,7 +446,7 @@ class WebEngineTab(browsertab.AbstractTab):
""" """
elems = [] elems = []
for js_elem in js_elems: for js_elem in js_elems:
elem = webengineelem.WebEngineElement(js_elem) elem = webengineelem.WebEngineElement(js_elem, self.run_js_async)
elems.append(elem) elems.append(elem)
callback(elems) callback(elems)
@ -467,7 +467,8 @@ class WebEngineTab(browsertab.AbstractTab):
if js_elem is None: if js_elem is None:
callback(None) callback(None)
else: else:
callback(webengineelem.WebEngineElement(js_elem)) elem = webengineelem.WebEngineElement(js_elem, self.run_js_async)
callback(elem)
def find_focus_element(self, callback): def find_focus_element(self, callback):
js_code = javascript.assemble('webelem', 'focus_element') js_code = javascript.assemble('webelem', 'focus_element')

View File

@ -72,6 +72,8 @@ window._qutebrowser.webelem = (function() {
return serialize_elem(elem, id); return serialize_elem(elem, id);
}; };
funcs.set_text = function(id, text) {
elements[id].value = text;
}; };
return funcs; return funcs;