summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2022-12-05 18:08:19 +0100
committerFlorian Bruhin <me@the-compiler.org>2022-12-05 18:32:50 +0100
commitc76e1004a321d3aeec4244ee42315bbee7438408 (patch)
treec5d2e29fa1fb015ce6e35f2319f85a1b39b1522f
parent5f0cb139515a3f8974e2490cbb3d0b86ec80036d (diff)
downloadqutebrowser-c76e1004a321d3aeec4244ee42315bbee7438408.tar.gz
qutebrowser-c76e1004a321d3aeec4244ee42315bbee7438408.zip
Delay various .show() calls until after tabs are added
With Qt 6.4, QtWebEngine closes/reopens the main window to switch the RHI rendering mode when a QWebEngineView gets added: https://github.com/qt/qtbase/blob/v6.4.1/src/widgets/kernel/qwidget.cpp#L10706-L10709 To avoid this, we need to make sure we only call .show() *after* adding a tab, similarly to what Qt did too: https://code.qt.io/cgit/qt/qtwebengine.git/commit/?id=d7e0fd5304ebdb12c6f809cdbcf8193b49b9ecd2 See #7504 ---- This commit handles various simple and isolated cases. Things requiring a bit more refactoring are handled in a separate commit.
-rw-r--r--qutebrowser/browser/navigate.py2
-rw-r--r--qutebrowser/browser/shared.py24
-rw-r--r--qutebrowser/browser/webelem.py2
-rw-r--r--qutebrowser/mainwindow/tabbedbrowser.py7
-rw-r--r--qutebrowser/mainwindow/windowundo.py2
-rw-r--r--qutebrowser/misc/sessions.py3
6 files changed, 18 insertions, 22 deletions
diff --git a/qutebrowser/browser/navigate.py b/qutebrowser/browser/navigate.py
index d2783e349..148f0f6e9 100644
--- a/qutebrowser/browser/navigate.py
+++ b/qutebrowser/browser/navigate.py
@@ -219,10 +219,10 @@ def prevnext(*, browsertab, win_id, baseurl, prev=False,
if window:
new_window = mainwindow.MainWindow(
private=cur_tabbed_browser.is_private)
- new_window.show()
tabbed_browser = objreg.get('tabbed-browser', scope='window',
window=new_window.win_id)
tabbed_browser.tabopen(url, background=False)
+ new_window.show()
elif tab:
cur_tabbed_browser.tabopen(url, background=background)
else:
diff --git a/qutebrowser/browser/shared.py b/qutebrowser/browser/shared.py
index a2313a219..92ed99584 100644
--- a/qutebrowser/browser/shared.py
+++ b/qutebrowser/browser/shared.py
@@ -360,23 +360,19 @@ def get_tab(win_id, target):
win_id: The window ID to open new tabs in
target: A usertypes.ClickTarget
"""
- if target == usertypes.ClickTarget.tab:
- bg_tab = False
- elif target == usertypes.ClickTarget.tab_bg:
- bg_tab = True
- elif target == usertypes.ClickTarget.window:
- tabbed_browser = objreg.get('tabbed-browser', scope='window',
- window=win_id)
+ tabbed_browser = objreg.get('tabbed-browser', scope='window', window=win_id)
+ if target == usertypes.ClickTarget.window:
window = mainwindow.MainWindow(private=tabbed_browser.is_private)
+ tab = window.tabbed_browser.tabopen(url=None, background=False)
window.show()
- win_id = window.win_id
- bg_tab = False
- else:
- raise ValueError("Invalid ClickTarget {}".format(target))
+ return tab
+ elif target in [usertypes.ClickTarget.tab, usertypes.ClickTarget.tab_bg]:
+ return tabbed_browser.tabopen(
+ url=None,
+ background=target == usertypes.ClickTarget.tab_bg,
+ )
- tabbed_browser = objreg.get('tabbed-browser', scope='window',
- window=win_id)
- return tabbed_browser.tabopen(url=None, background=bg_tab)
+ raise ValueError(f"Invalid ClickTarget {target}")
def get_user_stylesheet(searching=False):
diff --git a/qutebrowser/browser/webelem.py b/qutebrowser/browser/webelem.py
index 91e82ae0c..672c73fdb 100644
--- a/qutebrowser/browser/webelem.py
+++ b/qutebrowser/browser/webelem.py
@@ -405,8 +405,8 @@ class AbstractWebElement(collections.abc.MutableMapping): # type: ignore[type-a
elif click_target == usertypes.ClickTarget.window:
from qutebrowser.mainwindow import mainwindow
window = mainwindow.MainWindow(private=tabbed_browser.is_private)
- window.show()
window.tabbed_browser.tabopen(url)
+ window.show()
else:
raise ValueError("Unknown ClickTarget {}".format(click_target))
diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py
index bcd07f088..dfebe6b48 100644
--- a/qutebrowser/mainwindow/tabbedbrowser.py
+++ b/qutebrowser/mainwindow/tabbedbrowser.py
@@ -639,11 +639,10 @@ class TabbedBrowser(QWidget):
if config.val.tabs.tabs_are_windows and self.widget.count() > 0:
window = mainwindow.MainWindow(private=self.is_private)
+ tab = window.tabbed_browser.tabopen(
+ url=url, background=background, related=related)
window.show()
- tabbed_browser = objreg.get('tabbed-browser', scope='window',
- window=window.win_id)
- return tabbed_browser.tabopen(url=url, background=background,
- related=related)
+ return tab
tab = browsertab.create(win_id=self._win_id,
private=self.is_private,
diff --git a/qutebrowser/mainwindow/windowundo.py b/qutebrowser/mainwindow/windowundo.py
index 0104a8187..80f47aaaa 100644
--- a/qutebrowser/mainwindow/windowundo.py
+++ b/qutebrowser/mainwindow/windowundo.py
@@ -83,9 +83,9 @@ class WindowUndoManager(QObject):
private=False,
geometry=entry.geometry,
)
- window.show()
window.tabbed_browser.undo_stack = entry.tab_stack
window.tabbed_browser.undo()
+ window.show()
def init():
diff --git a/qutebrowser/misc/sessions.py b/qutebrowser/misc/sessions.py
index bfb2d4347..53f7bf3d3 100644
--- a/qutebrowser/misc/sessions.py
+++ b/qutebrowser/misc/sessions.py
@@ -467,7 +467,6 @@ class SessionManager(QObject):
"""Turn yaml data into windows."""
window = mainwindow.MainWindow(geometry=win['geometry'],
private=win.get('private', None))
- window.show()
tabbed_browser = objreg.get('tabbed-browser', scope='window',
window=window.win_id)
tab_to_focus = None
@@ -480,6 +479,8 @@ class SessionManager(QObject):
new_tab.set_pinned(True)
if tab_to_focus is not None:
tabbed_browser.widget.setCurrentIndex(tab_to_focus)
+
+ window.show()
if win.get('active', False):
QTimer.singleShot(0, tabbed_browser.widget.activateWindow)