diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index aa9e339910..b097062462 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -707,13 +707,6 @@ MainWindow::~MainWindow() */ void MainWindow::restoreConfigState() { - // start minimized if configured - if (config()->get(Config::GUI_MinimizeOnStartup).toBool()) { - hideWindow(); - } else { - bringToFront(); - } - if (config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()) { const QStringList fileNames = config()->get(Config::LastOpenedDatabases).toStringList(); for (const QString& filename : fileNames) { @@ -1370,6 +1363,24 @@ void MainWindow::databaseTabChanged(int tabIndex) updateEntryCountLabel(); } +void MainWindow::showEvent(QShowEvent* event) +{ + Q_UNUSED(event) +#ifdef Q_OS_WIN + // Qt Hack - Prevent white flicker when showing window + QTimer::singleShot(50, this, [=] { setProperty("windowOpacity", 1.0); }); +#endif +} + +void MainWindow::hideEvent(QHideEvent* event) +{ + Q_UNUSED(event) +#ifdef Q_OS_WIN + // Qt Hack - Prevent white flicker when showing window + setProperty("windowOpacity", 0.0); +#endif +} + void MainWindow::closeEvent(QCloseEvent* event) { if (m_appExiting) { diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 8436bf4ec2..53f9add15c 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -96,6 +96,8 @@ public slots: void restartApp(const QString& message); protected: + void showEvent(QShowEvent* event) override; + void hideEvent(QHideEvent* event) override; void closeEvent(QCloseEvent* event) override; void changeEvent(QEvent* event) override; void keyPressEvent(QKeyEvent* event) override; diff --git a/src/main.cpp b/src/main.cpp index 3797e89981..d320f6590c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -182,6 +182,10 @@ int main(int argc, char** argv) Application::bootstrap(); MainWindow mainWindow; +#ifdef Q_OS_WIN + // Qt Hack - Prevent white flicker when showing window + mainWindow.setProperty("windowOpacity", 0.0); +#endif // Disable screen capture if not explicitly allowed // This ensures any top-level windows (Main Window, Modal Dialogs, etc.) are excluded from screenshots @@ -203,6 +207,14 @@ int main(int argc, char** argv) mainWindow.openDatabase(filename, password, parser.value(keyfileOption)); } + // start minimized if configured + if (config()->get(Config::GUI_MinimizeOnStartup).toBool()) { + mainWindow.hideWindow(); + } else { + mainWindow.bringToFront(); + Application::processEvents(); + } + int exitCode = Application::exec(); // Check if restart was requested