[Gui] Implement raiseDialog on Windows

Issue: #7774
This commit is contained in:
Hannah von Reth 2020-03-24 12:01:04 +01:00 committed by Hannah von Reth
parent 56a25ed6e5
commit 4da684b95c
2 changed files with 21 additions and 0 deletions

View File

@ -0,0 +1,5 @@
Bugfix: On Windows the share dialog somtimes does not open as the top most window
We now ensure that the our dialogs are correctly raised.
https://github.com/owncloud/client/issues/7774

View File

@ -1088,6 +1088,22 @@ void ownCloudGui::raiseDialog(QWidget *raiseWidget)
False, // propagate
SubstructureRedirectMask | SubstructureNotifyMask,
&e);
#elif defined(Q_OS_WIN)
// Windows disallows raising a Window when you're not the active application.
// Use a common hack to attach to the active application
const auto activeProcessId = GetWindowThreadProcessId(GetForegroundWindow(), nullptr);
if (activeProcessId != qApp->applicationPid()) {
const auto threadId = GetCurrentThreadId();
// don't step here with a debugger...
if (AttachThreadInput(threadId, activeProcessId, true))
{
const auto hwnd = reinterpret_cast<HWND>(raiseWidget->winId());
SetForegroundWindow(hwnd);
SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
AttachThreadInput(threadId, activeProcessId, false);
}
}
#endif
}
}