From c207c8db104062c1110817d76f8400e35447f275 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 5 Dec 2022 18:36:34 +0100 Subject: Delay browser.commands .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 browser.commands, in particular the "_new_tabbed_browser" convenience method (which is now, sadly, likely less convenient). --- qutebrowser/browser/commands.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index 525344ea7..aa6f0f995 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -70,9 +70,7 @@ class CommandDispatcher: raise cmdutils.CommandError("Private windows are unavailable with " "the single-process process model.") - new_window = mainwindow.MainWindow(private=private) - new_window.show() - return new_window.tabbed_browser + return mainwindow.MainWindow(private=private).tabbed_browser def _count(self) -> int: """Convenience method to get the widget count.""" @@ -138,6 +136,7 @@ class CommandDispatcher: assert isinstance(private, bool) tabbed_browser = self._new_tabbed_browser(private) tabbed_browser.tabopen(url) + tabbed_browser.window().show() elif tab: tabbed_browser.tabopen(url, background=False, related=related) elif background: @@ -416,7 +415,10 @@ class CommandDispatcher: private=self._tabbed_browser.is_private or private) else: new_tabbed_browser = self._tabbed_browser + newtab = new_tabbed_browser.tabopen(background=bg) + new_tabbed_browser.window().show() + # The new tab could be in a new tabbed_browser (e.g. because of # tabs.tabs_are_windows being set) new_tabbed_browser = objreg.get('tabbed-browser', scope='window', @@ -506,6 +508,8 @@ class CommandDispatcher: "The window with id {} is not private".format(win_id)) tabbed_browser.tabopen(self._current_url()) + tabbed_browser.window().show() + if not keep: self._tabbed_browser.close_tab(self._current_widget(), add_undo=False, -- cgit v1.2.3-54-g00ecf