Windows: Prevent white flicker when showing main window (#9637)

* Fixes #9603
This commit is contained in:
Jonathan White 2023-07-19 16:12:11 -04:00
parent 2fe647fd7a
commit a81771207f
No known key found for this signature in database
GPG Key ID: 440FC65F2E0C6E01
3 changed files with 32 additions and 7 deletions

View File

@ -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) {

View File

@ -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;

View File

@ -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