Fix fetching selection

This commit is contained in:
Artur Shaikhullin 2017-12-07 17:45:05 +06:00
parent 5f1e0224a9
commit a8d79fedf3

View File

@ -160,7 +160,7 @@ class WebKitCaret(browsertab.AbstractCaret):
settings = self._widget.settings() settings = self._widget.settings()
settings.setAttribute(QWebSettings.CaretBrowsingEnabled, True) settings.setAttribute(QWebSettings.CaretBrowsingEnabled, True)
self.selection_enabled = bool(self.selection()) self.selection_enabled = bool(self._selection())
if self._widget.isVisible(): if self._widget.isVisible():
# Sometimes the caret isn't immediately visible, but unfocusing # Sometimes the caret isn't immediately visible, but unfocusing
@ -173,7 +173,7 @@ class WebKitCaret(browsertab.AbstractCaret):
# #
# Note: We can't use hasSelection() here, as that's always # Note: We can't use hasSelection() here, as that's always
# true in caret mode. # true in caret mode.
if not self.selection(): if not self.selection_enabled:
self._widget.page().currentFrame().evaluateJavaScript( self._widget.page().currentFrame().evaluateJavaScript(
utils.read_file('javascript/position_caret.js')) utils.read_file('javascript/position_caret.js'))
@ -336,10 +336,13 @@ class WebKitCaret(browsertab.AbstractCaret):
return self._widget.hasSelection() return self._widget.hasSelection()
def selection(self, html=False, callback=False): def selection(self, html=False, callback=False):
callback(self._selection(html))
def _selection(self, html=False):
if html: if html:
callback(self._widget.selectedHtml()) return self._widget.selectedHtml()
else: else:
callback(self._widget.selectedText()) return self._widget.selectedText()
def follow_selected(self, *, tab=False): def follow_selected(self, *, tab=False):
if not self.has_selection(): if not self.has_selection():
@ -351,7 +354,7 @@ class WebKitCaret(browsertab.AbstractCaret):
self._tab.run_js_async( self._tab.run_js_async(
'window.getSelection().anchorNode.parentNode.click()') 'window.getSelection().anchorNode.parentNode.click()')
else: else:
selection = self.selection(html=True) selection = self._selection(html=True)
try: try:
selected_element = xml.etree.ElementTree.fromstring( selected_element = xml.etree.ElementTree.fromstring(
'<html>{}</html>'.format(selection)).find('a') '<html>{}</html>'.format(selection)).find('a')