Fix :tab-clone with tabs -> tabs-are-windows=true.

See #536.
This commit is contained in:
Florian Bruhin 2015-03-08 14:54:42 +01:00
parent 1d9738c1ab
commit cd34562d34
2 changed files with 19 additions and 15 deletions

View File

@ -390,9 +390,13 @@ class CommandDispatcher:
curtab = self._current_widget() curtab = self._current_widget()
cur_title = tabbed_browser.page_title(self._current_index()) cur_title = tabbed_browser.page_title(self._current_index())
newtab = tabbed_browser.tabopen(background=bg, explicit=True) newtab = tabbed_browser.tabopen(background=bg, explicit=True)
idx = tabbed_browser.indexOf(newtab) # The new tab could be in a new tabbed_browser (e.g. because of
tabbed_browser.set_page_title(idx, cur_title) # tabs-are-windows being set)
tabbed_browser.setTabIcon(idx, curtab.icon()) new_tabbed_browser = objreg.get('tabbed-browser', scope='window',
window=newtab.win_id)
idx = new_tabbed_browser.indexOf(newtab)
new_tabbed_browser.set_page_title(idx, cur_title)
new_tabbed_browser.setTabIcon(idx, curtab.icon())
newtab.keep_icon = True newtab.keep_icon = True
newtab.setZoomFactor(curtab.zoomFactor()) newtab.setZoomFactor(curtab.zoomFactor())
history = qtutils.serialize(curtab.history()) history = qtutils.serialize(curtab.history())

View File

@ -61,6 +61,7 @@ class WebView(QWebView):
load. load.
registry: The ObjectRegistry associated with this tab. registry: The ObjectRegistry associated with this tab.
tab_id: The tab ID of the view. tab_id: The tab ID of the view.
win_id: The window ID of the view.
_cur_url: The current URL (accessed via cur_url property). _cur_url: The current URL (accessed via cur_url property).
_has_ssl_errors: Whether SSL errors occured during loading. _has_ssl_errors: Whether SSL errors occured during loading.
_zoom: A NeighborList with the zoom levels. _zoom: A NeighborList with the zoom levels.
@ -68,7 +69,6 @@ class WebView(QWebView):
_check_insertmode: If True, in mouseReleaseEvent we should check if we _check_insertmode: If True, in mouseReleaseEvent we should check if we
need to enter/leave insert mode. need to enter/leave insert mode.
_default_zoom_changed: Whether the zoom was changed from the default. _default_zoom_changed: Whether the zoom was changed from the default.
_win_id: The window ID of the view.
Signals: Signals:
scroll_pos_changed: Scroll percentage of current tab changed. scroll_pos_changed: Scroll percentage of current tab changed.
@ -92,7 +92,7 @@ class WebView(QWebView):
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-42948 # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-42948
# See https://github.com/The-Compiler/qutebrowser/issues/462 # See https://github.com/The-Compiler/qutebrowser/issues/462
self.setStyle(QStyleFactory.create('Fusion')) self.setStyle(QStyleFactory.create('Fusion'))
self._win_id = win_id self.win_id = win_id
self.load_status = LoadStatus.none self.load_status = LoadStatus.none
self._check_insertmode = False self._check_insertmode = False
self.inspector = None self.inspector = None
@ -204,14 +204,14 @@ class WebView(QWebView):
if self.page().history().canGoBack(): if self.page().history().canGoBack():
self.back() self.back()
else: else:
message.error(self._win_id, "At beginning of history.", message.error(self.win_id, "At beginning of history.",
immediately=True) immediately=True)
elif e.button() in (Qt.XButton2, Qt.RightButton): elif e.button() in (Qt.XButton2, Qt.RightButton):
# Forward button on mice which have it, or rocker gesture # Forward button on mice which have it, or rocker gesture
if self.page().history().canGoForward(): if self.page().history().canGoForward():
self.forward() self.forward()
else: else:
message.error(self._win_id, "At end of history.", message.error(self.win_id, "At end of history.",
immediately=True) immediately=True)
def _mousepress_insertmode(self, e): def _mousepress_insertmode(self, e):
@ -253,12 +253,12 @@ class WebView(QWebView):
if ((hitresult.isContentEditable() and elem.is_writable()) or if ((hitresult.isContentEditable() and elem.is_writable()) or
elem.is_editable()): elem.is_editable()):
log.mouse.debug("Clicked editable element!") log.mouse.debug("Clicked editable element!")
modeman.enter(self._win_id, usertypes.KeyMode.insert, 'click', modeman.enter(self.win_id, usertypes.KeyMode.insert, 'click',
only_if_normal=True) only_if_normal=True)
else: else:
log.mouse.debug("Clicked non-editable element!") log.mouse.debug("Clicked non-editable element!")
if config.get('input', 'auto-leave-insert-mode'): if config.get('input', 'auto-leave-insert-mode'):
modeman.maybe_leave(self._win_id, usertypes.KeyMode.insert, modeman.maybe_leave(self.win_id, usertypes.KeyMode.insert,
'click') 'click')
def mouserelease_insertmode(self): def mouserelease_insertmode(self):
@ -273,12 +273,12 @@ class WebView(QWebView):
return return
if elem.is_editable(): if elem.is_editable():
log.mouse.debug("Clicked editable element (delayed)!") log.mouse.debug("Clicked editable element (delayed)!")
modeman.enter(self._win_id, usertypes.KeyMode.insert, modeman.enter(self.win_id, usertypes.KeyMode.insert,
'click-delayed', only_if_normal=True) 'click-delayed', only_if_normal=True)
else: else:
log.mouse.debug("Clicked non-editable element (delayed)!") log.mouse.debug("Clicked non-editable element (delayed)!")
if config.get('input', 'auto-leave-insert-mode'): if config.get('input', 'auto-leave-insert-mode'):
modeman.maybe_leave(self._win_id, usertypes.KeyMode.insert, modeman.maybe_leave(self.win_id, usertypes.KeyMode.insert,
'click-delayed') 'click-delayed')
def _mousepress_opentarget(self, e): def _mousepress_opentarget(self, e):
@ -348,7 +348,7 @@ class WebView(QWebView):
if perc < 0: if perc < 0:
raise cmdexc.CommandError("Can't zoom {}%!".format(perc)) raise cmdexc.CommandError("Can't zoom {}%!".format(perc))
self.setZoomFactor(float(perc) / 100) self.setZoomFactor(float(perc) / 100)
message.info(self._win_id, "Zoom level: {}%".format(perc)) message.info(self.win_id, "Zoom level: {}%".format(perc))
self._default_zoom_changed = True self._default_zoom_changed = True
def zoom(self, offset): def zoom(self, offset):
@ -403,7 +403,7 @@ class WebView(QWebView):
if not config.get('input', 'auto-insert-mode'): if not config.get('input', 'auto-insert-mode'):
return return
mode_manager = objreg.get('mode-manager', scope='window', mode_manager = objreg.get('mode-manager', scope='window',
window=self._win_id) window=self.win_id)
cur_mode = mode_manager.mode cur_mode = mode_manager.mode
if cur_mode == usertypes.KeyMode.insert or not ok: if cur_mode == usertypes.KeyMode.insert or not ok:
return return
@ -415,7 +415,7 @@ class WebView(QWebView):
return return
log.modes.debug("focus element: {}".format(repr(elem))) log.modes.debug("focus element: {}".format(repr(elem)))
if elem.is_editable(): if elem.is_editable():
modeman.enter(self._win_id, usertypes.KeyMode.insert, modeman.enter(self.win_id, usertypes.KeyMode.insert,
'load finished', only_if_normal=True) 'load finished', only_if_normal=True)
@pyqtSlot(usertypes.KeyMode) @pyqtSlot(usertypes.KeyMode)
@ -459,7 +459,7 @@ class WebView(QWebView):
log.webview.warning("WebModalDialog requested, but we don't " log.webview.warning("WebModalDialog requested, but we don't "
"support that!") "support that!")
tabbed_browser = objreg.get('tabbed-browser', scope='window', tabbed_browser = objreg.get('tabbed-browser', scope='window',
window=self._win_id) window=self.win_id)
return tabbed_browser.tabopen(background=False) return tabbed_browser.tabopen(background=False)
def paintEvent(self, e): def paintEvent(self, e):