diff --git a/src/modules/Workspaces/WorkspacesSnapshotTool/SnapshotUtils.cpp b/src/modules/Workspaces/WorkspacesSnapshotTool/SnapshotUtils.cpp index 79f19219b3e9..1d5bc8a17963 100644 --- a/src/modules/Workspaces/WorkspacesSnapshotTool/SnapshotUtils.cpp +++ b/src/modules/Workspaces/WorkspacesSnapshotTool/SnapshotUtils.cpp @@ -52,6 +52,11 @@ namespace SnapshotUtils for (const auto window : windows) { + if (WindowFilter::FilterPopup(window)) + { + continue; + } + // filter by window rect size RECT rect = WindowUtils::GetWindowRect(window); if (rect.right - rect.left <= 0 || rect.bottom - rect.top <= 0) @@ -93,7 +98,7 @@ namespace SnapshotUtils continue; } - // fix for the packaged apps that are not caught when minimized, e.g., Settings. + // fix for the packaged apps that are not caught when minimized, e.g. Settings, Microsoft ToDo, ... if (processPath.ends_with(NonLocalizable::ApplicationFrameHost)) { for (auto otherWindow : windows) @@ -110,11 +115,6 @@ namespace SnapshotUtils } } - if (WindowFilter::FilterPopup(window)) - { - continue; - } - auto data = Utils::Apps::GetApp(processPath, pid, installedApps); if (!data.has_value() || data->name.empty()) { diff --git a/src/modules/Workspaces/WorkspacesWindowArranger/WindowArranger.cpp b/src/modules/Workspaces/WorkspacesWindowArranger/WindowArranger.cpp index 37b24b231fb4..a9db73664dc7 100644 --- a/src/modules/Workspaces/WorkspacesWindowArranger/WindowArranger.cpp +++ b/src/modules/Workspaces/WorkspacesWindowArranger/WindowArranger.cpp @@ -14,6 +14,11 @@ #include #include +namespace NonLocalizable +{ + const std::wstring ApplicationFrameHost = L"ApplicationFrameHost.exe"; +} + namespace PlacementHelper { // When calculating the coordinates difference (== 'distance') between 2 windows, there are additional values added to the real distance @@ -157,6 +162,11 @@ std::optional WindowArranger::GetNearestWindow(const Workspa for (HWND window : m_windowsBefore) { + if (WindowFilter::FilterPopup(window)) + { + continue; + } + if (std::find(movedWindows.begin(), movedWindows.end(), window) != movedWindows.end()) { continue; @@ -170,6 +180,24 @@ std::optional WindowArranger::GetNearestWindow(const Workspa DWORD pid{}; GetWindowThreadProcessId(window, &pid); + std::wstring title = WindowUtils::GetWindowTitle(window); + + // fix for the packaged apps that are not caught when minimized, e.g. Settings, Microsoft ToDo, ... + if (processPath.ends_with(NonLocalizable::ApplicationFrameHost)) + { + for (auto otherWindow : m_windowsBefore) + { + DWORD otherPid{}; + GetWindowThreadProcessId(otherWindow, &otherPid); + + // searching for the window with the same title but different PID + if (pid != otherPid && title == WindowUtils::GetWindowTitle(otherWindow)) + { + processPath = get_process_path(otherPid); + break; + } + } + } auto data = Utils::Apps::GetApp(processPath, pid, m_installedApps); if (!data.has_value()) diff --git a/src/modules/Workspaces/workspaces-common/WindowFilter.h b/src/modules/Workspaces/workspaces-common/WindowFilter.h index 8e561fc74249..c76ad81237c3 100644 --- a/src/modules/Workspaces/workspaces-common/WindowFilter.h +++ b/src/modules/Workspaces/workspaces-common/WindowFilter.h @@ -50,11 +50,6 @@ namespace WindowFilter return false; } - if (WindowFilter::FilterPopup(window)) - { - return false; - } - if (!VirtualDesktop::instance().IsWindowOnCurrentDesktop(window)) { return false;