Use signals to update statusbar in caret mode
This means we don't use objreg anymore to get the status bar, and also makes the bar more accurately reflect reality. See #3583
This commit is contained in:
parent
460bd86579
commit
e50068021d
@ -333,7 +333,14 @@ class AbstractZoom(QObject):
|
||||
|
||||
class AbstractCaret(QObject):
|
||||
|
||||
"""Attribute of AbstractTab for caret browsing."""
|
||||
"""Attribute of AbstractTab for caret browsing.
|
||||
|
||||
Signals:
|
||||
selection_toggled: Emitted when the selection was toggled.
|
||||
arg: Whether the selection is now active.
|
||||
"""
|
||||
|
||||
selection_toggled = pyqtSignal(bool)
|
||||
|
||||
def __init__(self, tab, mode_manager, parent=None):
|
||||
super().__init__(parent)
|
||||
|
@ -230,7 +230,7 @@ class WebEngineCaret(browsertab.AbstractCaret):
|
||||
|
||||
self._tab.run_js_async(
|
||||
javascript.assemble('caret', 'setPlatform', sys.platform))
|
||||
self._js_call('setInitialCursor')
|
||||
self._js_call('setInitialCursor', self.selection_toggled.emit)
|
||||
|
||||
@pyqtSlot(usertypes.KeyMode)
|
||||
def _on_mode_left(self, mode):
|
||||
@ -297,7 +297,7 @@ class WebEngineCaret(browsertab.AbstractCaret):
|
||||
self._js_call('moveToEndOfDocument')
|
||||
|
||||
def toggle_selection(self):
|
||||
self._js_call('toggleSelection')
|
||||
self._js_call('toggleSelection', self.selection_toggled.emit)
|
||||
|
||||
def drop_selection(self):
|
||||
self._js_call('dropSelection')
|
||||
@ -352,9 +352,8 @@ class WebEngineCaret(browsertab.AbstractCaret):
|
||||
self._tab.run_js_async(js_code, lambda jsret:
|
||||
self._follow_selected_cb(jsret, tab))
|
||||
|
||||
def _js_call(self, command):
|
||||
self._tab.run_js_async(
|
||||
javascript.assemble('caret', command))
|
||||
def _js_call(self, command, callback=None):
|
||||
self._tab.run_js_async(javascript.assemble('caret', command), callback)
|
||||
|
||||
|
||||
class WebEngineScroller(browsertab.AbstractScroller):
|
||||
|
@ -196,9 +196,10 @@ class WebKitCaret(browsertab.AbstractCaret):
|
||||
if mode != usertypes.KeyMode.caret:
|
||||
return
|
||||
|
||||
self.selection_enabled = self._widget.hasSelection()
|
||||
self.selection_toggled.emit(self.selection_enabled)
|
||||
settings = self._widget.settings()
|
||||
settings.setAttribute(QWebSettings.CaretBrowsingEnabled, True)
|
||||
self.selection_enabled = self._widget.hasSelection()
|
||||
|
||||
if self._widget.isVisible():
|
||||
# Sometimes the caret isn't immediately visible, but unfocusing
|
||||
@ -363,9 +364,7 @@ class WebKitCaret(browsertab.AbstractCaret):
|
||||
|
||||
def toggle_selection(self):
|
||||
self.selection_enabled = not self.selection_enabled
|
||||
mainwindow = objreg.get('main-window', scope='window',
|
||||
window=self._tab.win_id)
|
||||
mainwindow.status.set_mode_active(usertypes.KeyMode.caret, True)
|
||||
self.selection_toggled.emit(self.selection_enabled)
|
||||
|
||||
def drop_selection(self):
|
||||
self._widget.triggerPageAction(QWebPage.MoveToNextChar)
|
||||
|
@ -1269,13 +1269,14 @@ window._qutebrowser.caret = (function() {
|
||||
funcs.setInitialCursor = () => {
|
||||
if (!CaretBrowsing.initiated) {
|
||||
CaretBrowsing.setInitialCursor();
|
||||
return;
|
||||
return CaretBrowsing.selectionEnabled;
|
||||
}
|
||||
|
||||
if (window.getSelection().toString().length === 0) {
|
||||
positionCaret();
|
||||
}
|
||||
CaretBrowsing.toggle();
|
||||
return CaretBrowsing.selectionEnabled;
|
||||
};
|
||||
|
||||
funcs.setPlatform = (platform) => {
|
||||
@ -1361,6 +1362,7 @@ window._qutebrowser.caret = (function() {
|
||||
|
||||
funcs.toggleSelection = () => {
|
||||
CaretBrowsing.selectionEnabled = !CaretBrowsing.selectionEnabled;
|
||||
return CaretBrowsing.selectionEnabled;
|
||||
};
|
||||
|
||||
return funcs;
|
||||
|
@ -479,6 +479,10 @@ class MainWindow(QWidget):
|
||||
self.tabbed_browser.cur_link_hovered.connect(status.url.set_hover_url)
|
||||
self.tabbed_browser.cur_load_status_changed.connect(
|
||||
status.url.on_load_status_changed)
|
||||
|
||||
self.tabbed_browser.cur_caret_selection_toggled.connect(
|
||||
status.on_caret_selection_toggled)
|
||||
|
||||
self.tabbed_browser.cur_fullscreen_requested.connect(
|
||||
self._on_fullscreen_requested)
|
||||
self.tabbed_browser.cur_fullscreen_requested.connect(status.maybe_hide)
|
||||
|
@ -289,17 +289,9 @@ class StatusBar(QWidget):
|
||||
log.statusbar.debug("Setting prompt flag to {}".format(val))
|
||||
self._color_flags.prompt = val
|
||||
elif mode == usertypes.KeyMode.caret:
|
||||
tab = self._current_tab()
|
||||
log.statusbar.debug("Setting caret flag - val {}, selection "
|
||||
"{}".format(val, tab.caret.selection_enabled))
|
||||
if val:
|
||||
if tab.caret.selection_enabled:
|
||||
self._set_mode_text("{} selection".format(mode.name))
|
||||
self._color_flags.caret = ColorFlags.CaretMode.selection
|
||||
else:
|
||||
self._set_mode_text(mode.name)
|
||||
self._color_flags.caret = ColorFlags.CaretMode.on
|
||||
else:
|
||||
if not val:
|
||||
# Turning on is handled in on_current_caret_selection_toggled
|
||||
log.statusbar.debug("Setting caret mode off")
|
||||
self._color_flags.caret = ColorFlags.CaretMode.off
|
||||
config.set_register_stylesheet(self, update=False)
|
||||
|
||||
@ -377,6 +369,18 @@ class StatusBar(QWidget):
|
||||
self.maybe_hide()
|
||||
assert tab.private == self._color_flags.private
|
||||
|
||||
@pyqtSlot(bool)
|
||||
def on_caret_selection_toggled(self, selection):
|
||||
"""Update the statusbar when entering/leaving caret selection mode."""
|
||||
log.statusbar.debug("Setting caret selection {}".format(selection))
|
||||
if selection:
|
||||
self._set_mode_text("caret selection")
|
||||
self._color_flags.caret = ColorFlags.CaretMode.selection
|
||||
else:
|
||||
self._set_mode_text("caret")
|
||||
self._color_flags.caret = ColorFlags.CaretMode.on
|
||||
config.set_register_stylesheet(self, update=False)
|
||||
|
||||
def resizeEvent(self, e):
|
||||
"""Extend resizeEvent of QWidget to emit a resized signal afterwards.
|
||||
|
||||
|
@ -104,6 +104,7 @@ class TabbedBrowser(QWidget):
|
||||
cur_scroll_perc_changed = pyqtSignal(int, int)
|
||||
cur_load_status_changed = pyqtSignal(str)
|
||||
cur_fullscreen_requested = pyqtSignal(bool)
|
||||
cur_caret_selection_toggled = pyqtSignal(bool)
|
||||
close_window = pyqtSignal()
|
||||
resized = pyqtSignal('QRect')
|
||||
current_tab_changed = pyqtSignal(browsertab.AbstractTab)
|
||||
@ -217,6 +218,8 @@ class TabbedBrowser(QWidget):
|
||||
self._filter.create(self.cur_load_status_changed, tab))
|
||||
tab.fullscreen_requested.connect(
|
||||
self._filter.create(self.cur_fullscreen_requested, tab))
|
||||
tab.caret.selection_toggled.connect(
|
||||
self._filter.create(self.cur_caret_selection_toggled, tab))
|
||||
# misc
|
||||
tab.scroller.perc_changed.connect(self.on_scroll_pos_changed)
|
||||
tab.url_changed.connect(
|
||||
|
Loading…
Reference in New Issue
Block a user