Skip to content

Commit

Permalink
fix main window blinking issue caused by OpenGL on Qt6
Browse files Browse the repository at this point in the history
  • Loading branch information
tamlok committed Jun 11, 2024
1 parent 2ebb210 commit 889026b
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 13 deletions.
30 changes: 18 additions & 12 deletions src/widgets/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <QTimer>
#include <QProgressDialog>
#include <QHotkey>
#include <QWebEngineView>

#include "notebookexplorer.h"
#include "vnotex.h"
Expand Down Expand Up @@ -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.
Expand All @@ -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..."),
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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);
}

Expand All @@ -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()) {
Expand Down
6 changes: 5 additions & 1 deletion src/widgets/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class QSystemTrayIcon;
class QTimer;
class QLabel;
class QTextEdit;
class QWebEngineView;

namespace vnotex
{
Expand Down Expand Up @@ -137,7 +138,7 @@ namespace vnotex

void saveStateAndGeometry();

void loadStateAndGeometry(bool p_stateOnly = false);
void loadStateAndGeometry();

// Used to test widget in development.
void demoWidget();
Expand All @@ -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;
Expand Down

0 comments on commit 889026b

Please sign in to comment.