From 889026becec17d5c59484ee84f269ad8a88cba99 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Tue, 11 Jun 2024 22:41:29 +0800 Subject: [PATCH] fix main window blinking issue caused by OpenGL on Qt6 --- src/widgets/mainwindow.cpp | 30 ++++++++++++++++++------------ src/widgets/mainwindow.h | 6 +++++- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/widgets/mainwindow.cpp b/src/widgets/mainwindow.cpp index 3112967963..979b906eee 100644 --- a/src/widgets/mainwindow.cpp +++ b/src/widgets/mainwindow.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include "notebookexplorer.h" #include "vnotex.h" @@ -74,8 +75,6 @@ MainWindow::MainWindow(QWidget *p_parent) setupShortcuts(); - loadStateAndGeometry(); - m_dockWidgetHelper.postSetup(); // The signal is particularly useful if your application has to do some last-second cleanup. @@ -97,8 +96,12 @@ MainWindow::~MainWindow() void MainWindow::kickOffOnStart(const QStringList &p_paths) { QTimer::singleShot(300, [this, p_paths]() { - // Need to load the state of dock widgets again after the main window is shown. - loadStateAndGeometry(true); + if (m_dummyWebView) { + delete m_dummyWebView; + m_dummyWebView = nullptr; + } + + loadStateAndGeometry(); { QProgressDialog proDlg(tr("Initializing core components..."), @@ -174,6 +177,11 @@ void MainWindow::setupUI() setupSystemTray(); m_dockWidgetHelper.activateDock(DockWidgetHelper::NavigationDock); + +#if defined(Q_OS_WIN) + m_dummyWebView = new QWebEngineView(this); + m_dummyWebView->setFixedSize(1, 1); +#endif } void MainWindow::setupStatusBar() @@ -452,12 +460,12 @@ void MainWindow::saveStateAndGeometry() sessionConfig.setMainWindowStateGeometry(sg); } -void MainWindow::loadStateAndGeometry(bool p_stateOnly) +void MainWindow::loadStateAndGeometry() { const auto& sessionConfig = ConfigMgr::getInst().getSessionConfig(); const auto sg = sessionConfig.getMainWindowStateGeometry(); - if (!p_stateOnly && !sg.m_mainGeometry.isEmpty()) { + if (!sg.m_mainGeometry.isEmpty()) { restoreGeometry(sg.m_mainGeometry); } @@ -466,12 +474,10 @@ void MainWindow::loadStateAndGeometry(bool p_stateOnly) restoreState(sg.m_mainState); } - if (!p_stateOnly) { - m_visibleDocksBeforeExpand = sg.m_visibleDocksBeforeExpand; - if (m_visibleDocksBeforeExpand.isEmpty()) { - // Init (or init again if there is no visible dock). - m_visibleDocksBeforeExpand = m_dockWidgetHelper.getVisibleDocks(); - } + m_visibleDocksBeforeExpand = sg.m_visibleDocksBeforeExpand; + if (m_visibleDocksBeforeExpand.isEmpty()) { + // Init (or init again if there is no visible dock). + m_visibleDocksBeforeExpand = m_dockWidgetHelper.getVisibleDocks(); } if (!sg.m_tagExplorerState.isEmpty()) { diff --git a/src/widgets/mainwindow.h b/src/widgets/mainwindow.h index aedefe3cbe..19bcd418c6 100644 --- a/src/widgets/mainwindow.h +++ b/src/widgets/mainwindow.h @@ -14,6 +14,7 @@ class QSystemTrayIcon; class QTimer; class QLabel; class QTextEdit; +class QWebEngineView; namespace vnotex { @@ -137,7 +138,7 @@ namespace vnotex void saveStateAndGeometry(); - void loadStateAndGeometry(bool p_stateOnly = false); + void loadStateAndGeometry(); // Used to test widget in development. void demoWidget(); @@ -160,6 +161,9 @@ namespace vnotex void loadWidgetsData(); + // WebView to handle OpenGL blinking on Windows. + QWebEngineView *m_dummyWebView = nullptr; + DockWidgetHelper m_dockWidgetHelper; NotebookExplorer *m_notebookExplorer = nullptr;