diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -1052,6 +1052,15 @@ if (!Settings::keepOpen() && isVisible() && KWindowSystem::activeWindow() != winId()) { toggleWindowState(); } + } else if (m_isWayland) { + if (Settings::keepOpen()) { + return; + } + + const auto activeWin = qApp->activeWindow(); + if (activeWin == nullptr) { + toggleWindowState(); + } } else { if (!Settings::keepOpen() && hasFocus()) { toggleWindowState(); @@ -1340,8 +1349,12 @@ { if (!Settings::firstRun()) KWindowSystem::forceActiveWindow(winId()); - connect(KWindowSystem::self(), &KWindowSystem::activeWindowChanged, - this, &MainWindow::wmActiveWindowChanged); + if (m_isWayland) { + connect(qApp, &QApplication::focusChanged, this, &MainWindow::wmActiveWindowChanged); + } else { + connect(KWindowSystem::self(), &KWindowSystem::activeWindowChanged, + this, &MainWindow::wmActiveWindowChanged); + } applyWindowProperties(); @@ -1354,8 +1367,12 @@ void MainWindow::sharedPreHideWindow() { - disconnect(KWindowSystem::self(), &KWindowSystem::activeWindowChanged, - this, &MainWindow::wmActiveWindowChanged); + if (m_isWayland) { + disconnect(qApp, &QApplication::focusChanged, this, &MainWindow::wmActiveWindowChanged); + } else { + disconnect(KWindowSystem::self(), &KWindowSystem::activeWindowChanged, + this, &MainWindow::wmActiveWindowChanged); + } } void MainWindow::sharedAfterHideWindow()