diff --git a/changelog/unreleased/7774 b/changelog/unreleased/7774 new file mode 100644 index 00000000000..e69e81b0375 --- /dev/null +++ b/changelog/unreleased/7774 @@ -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 diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 7516c8ed880..46763415a8a 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -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(raiseWidget->winId()); + SetForegroundWindow(hwnd); + SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); + AttachThreadInput(threadId, activeProcessId, false); + } + } #endif } }