From a1f02e925f006b9aff5d602bffe4a41a09f0ab15 Mon Sep 17 00:00:00 2001 From: Joachim Kohlhammer Date: Sun, 10 Mar 2024 13:28:24 +0100 Subject: [PATCH] Qt6: Fixed flickering MainWindow (#4452) * Qt6: Fixed flickering MainWindow When opening a Mapchart for the first time after start of GC, the MainWindow used to shrink and be maximized again afterwards automatically, matching the description in https://forum.qt.io/topic/141398/qwebengineview-closes-reopens-window-when-added-dynamically By adding and removing a QWebEngineView before showing MainWindow, this flicker can be avoided * Added empty HTML to RideMapWindow This fix avoids flicker for the RideMapWindow in (un-)maximized windows (only if the chart was already part of the layout on startup) --- src/Charts/RideMapWindow.cpp | 1 + src/Gui/MainWindow.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/Charts/RideMapWindow.cpp b/src/Charts/RideMapWindow.cpp index 66d55f18f..4ea818657 100644 --- a/src/Charts/RideMapWindow.cpp +++ b/src/Charts/RideMapWindow.cpp @@ -137,6 +137,7 @@ RideMapWindow::RideMapWindow(Context *context, int mapType) : GcChartWindow(cont view->setContentsMargins(0,0,0,0); view->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); view->setAcceptDrops(false); + view->page()->setHtml(""); layout->addWidget(view); HelpWhatsThis *help = new HelpWhatsThis(view); diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index c56d46ec6..54a0e0eb6 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -444,6 +444,19 @@ MainWindow::MainWindow(const QDir &home) tablayout->addWidget(viewStack); setCentralWidget(central); +#if QT_VERSION >= 0x060000 + /*---------------------------------------------------------------------- + * Hack to avoid a flickering MainWindow when showing a QWebEngineView in a chart, e.g. a Map: + * Temporarily add a dummy QWebEngineView with some random content before the MainWindow is shown + * https://forum.qt.io/topic/141398/qwebengineview-closes-reopens-window-when-added-dynamically + *--------------------------------------------------------------------*/ + QWebEngineView *dummywev = new QWebEngineView(); + dummywev->page()->setHtml(""); + mainLayout->addWidget(dummywev); + mainLayout->removeWidget(dummywev); + delete dummywev; +#endif + /*---------------------------------------------------------------------- * Application Menus *--------------------------------------------------------------------*/