Implement selection
This commit is contained in:
parent
90614d1fe3
commit
e21edd3e18
@ -1021,8 +1021,8 @@ class CommandDispatcher:
|
||||
mainframe = None
|
||||
else:
|
||||
if webview.hasSelection():
|
||||
env['QUTE_SELECTED_TEXT'] = webview.selectedText()
|
||||
env['QUTE_SELECTED_HTML'] = webview.selectedHtml()
|
||||
env['QUTE_SELECTED_TEXT'] = webview.selection()
|
||||
env['QUTE_SELECTED_HTML'] = webview.selection(html=True)
|
||||
mainframe = webview.page().mainFrame()
|
||||
|
||||
try:
|
||||
@ -1101,8 +1101,7 @@ class CommandDispatcher:
|
||||
tab: Load the selected link in a new tab.
|
||||
"""
|
||||
widget = self._current_widget()
|
||||
page = widget.page()
|
||||
if not page.hasSelection():
|
||||
if not widget.has_selection():
|
||||
return
|
||||
if QWebSettings.globalSettings().testAttribute(
|
||||
QWebSettings.JavascriptEnabled):
|
||||
@ -1113,7 +1112,7 @@ class CommandDispatcher:
|
||||
else:
|
||||
try:
|
||||
selected_element = xml.etree.ElementTree.fromstring(
|
||||
'<html>' + widget.selectedHtml() + '</html>').find('a')
|
||||
'<html>' + widget.selection(html=True) + '</html>').find('a')
|
||||
except xml.etree.ElementTree.ParseError:
|
||||
raise cmdexc.CommandError('Could not parse selected element!')
|
||||
|
||||
@ -1640,8 +1639,9 @@ class CommandDispatcher:
|
||||
sel: Use the primary selection instead of the clipboard.
|
||||
keep: If given, stay in visual mode after yanking.
|
||||
"""
|
||||
s = self._current_widget().selectedText()
|
||||
if not self._current_widget().hasSelection() or len(s) == 0:
|
||||
tab = self._current_widget()
|
||||
s = tab.selection()
|
||||
if not tab.has_selection() or len(s) == 0:
|
||||
message.info(self._win_id, "Nothing to yank")
|
||||
return
|
||||
|
||||
|
@ -59,7 +59,8 @@ class AbstractCaret:
|
||||
|
||||
"""Attribute of AbstractTab for caret browsing."""
|
||||
|
||||
def __init__(self, win_id):
|
||||
def __init__(self, win_id, tab):
|
||||
self._tab = tab
|
||||
self._win_id = win_id
|
||||
self.widget = None
|
||||
self.selection_enabled = False
|
||||
@ -259,7 +260,7 @@ class AbstractTab(QWidget):
|
||||
super().__init__(parent)
|
||||
self.history = AbstractHistory(self)
|
||||
self.scroll = AbstractScroller(parent=self)
|
||||
self.caret = AbstractCaret(win_id=win_id)
|
||||
self.caret = AbstractCaret(win_id=win_id, tab=self)
|
||||
self._layout = None
|
||||
self._widget = None
|
||||
self.keep_icon = False # FIXME:refactor get rid of this?
|
||||
@ -316,6 +317,12 @@ class AbstractTab(QWidget):
|
||||
def icon(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def has_selection(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def selection(self, html=False):
|
||||
raise NotImplementedError
|
||||
|
||||
def __repr__(self):
|
||||
url = utils.elide(self.cur_url.toDisplayString(QUrl.EncodeUnicode),
|
||||
100)
|
||||
|
@ -83,7 +83,7 @@ class WebEngineViewTab(tab.AbstractTab):
|
||||
widget = QWebEngineView()
|
||||
self.history = WebEngineHistory(self)
|
||||
self.scroll = WebEngineScroller()
|
||||
self.caret = WebEngineCaret(win_id=win_id)
|
||||
self.caret = WebEngineCaret(win_id=win_id, tab=self)
|
||||
self._set_widget(widget)
|
||||
self._connect_signals()
|
||||
|
||||
@ -134,6 +134,14 @@ class WebEngineViewTab(tab.AbstractTab):
|
||||
def icon(self):
|
||||
return self._widget.icon()
|
||||
|
||||
def has_selection(self):
|
||||
return self._widget.hasSelection()
|
||||
|
||||
def selection(self, html=False):
|
||||
if html:
|
||||
raise NotImplementedError
|
||||
return self._widget.selectedText()
|
||||
|
||||
def _connect_signals(self):
|
||||
view = self._widget
|
||||
page = view.page()
|
||||
|
@ -40,7 +40,7 @@ class WebViewCaret(tab.AbstractCaret):
|
||||
|
||||
settings = self.widget.settings()
|
||||
settings.setAttribute(QWebSettings.CaretBrowsingEnabled, True)
|
||||
self.selection_enabled = bool(self.widget.page().selectedText())
|
||||
self.selection_enabled = bool(self._tab.selection())
|
||||
|
||||
if self.widget.isVisible():
|
||||
# Sometimes the caret isn't immediately visible, but unfocusing
|
||||
@ -53,8 +53,7 @@ class WebViewCaret(tab.AbstractCaret):
|
||||
#
|
||||
# Note: We can't use hasSelection() here, as that's always
|
||||
# true in caret mode.
|
||||
if not self.widget.page().selectedText():
|
||||
# FIXME use self.tab here
|
||||
if not self._tab.selection():
|
||||
self.widget.page().currentFrame().evaluateJavaScript(
|
||||
utils.read_file('javascript/position_caret.js'))
|
||||
|
||||
@ -353,7 +352,7 @@ class WebViewTab(tab.AbstractTab):
|
||||
widget = webview.WebView(win_id, self.tab_id)
|
||||
self.history = WebViewHistory(self)
|
||||
self.scroll = WebViewScroller(parent=self)
|
||||
self.caret = WebViewCaret(win_id=win_id)
|
||||
self.caret = WebViewCaret(win_id=win_id, tab=self)
|
||||
self._set_widget(widget)
|
||||
self._connect_signals()
|
||||
|
||||
@ -404,6 +403,14 @@ class WebViewTab(tab.AbstractTab):
|
||||
def zoom_factor(self):
|
||||
return self._widget.zoomFactor()
|
||||
|
||||
def has_selection(self):
|
||||
return self._widget.hasSelection()
|
||||
|
||||
def selection(self, html=False):
|
||||
if html:
|
||||
return self._widget.selectedHtml()
|
||||
return self._widget.selectedText()
|
||||
|
||||
def _connect_signals(self):
|
||||
view = self._widget
|
||||
page = view.page()
|
||||
|
Loading…
Reference in New Issue
Block a user