diff options
author | Florian Bruhin <me@the-compiler.org> | 2022-12-05 18:08:19 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2022-12-05 18:32:50 +0100 |
commit | c76e1004a321d3aeec4244ee42315bbee7438408 (patch) | |
tree | c5d2e29fa1fb015ce6e35f2319f85a1b39b1522f | |
parent | 5f0cb139515a3f8974e2490cbb3d0b86ec80036d (diff) | |
download | qutebrowser-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.py | 2 | ||||
-rw-r--r-- | qutebrowser/browser/shared.py | 24 | ||||
-rw-r--r-- | qutebrowser/browser/webelem.py | 2 | ||||
-rw-r--r-- | qutebrowser/mainwindow/tabbedbrowser.py | 7 | ||||
-rw-r--r-- | qutebrowser/mainwindow/windowundo.py | 2 | ||||
-rw-r--r-- | qutebrowser/misc/sessions.py | 3 |
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) |