[FancyZones] Open window in a zone fix (#18193)

* removed background thread monitoring virtual desktops

* removed virtual desktop callbacks

* centralize work with virtual desktops

* updated virtual desktops sync

* app zone history logs

* logs

* get uwp process path

* spell
This commit is contained in:
Seraphima Zykova
2022-05-13 15:06:11 +02:00
committed by GitHub
parent d15ff6da8d
commit 5f4a26ebba
11 changed files with 256 additions and 249 deletions

View File

@@ -1,54 +1,34 @@
#pragma once
#include "WorkArea.h"
#include "on_thread_executor.h"
class VirtualDesktop
{
public:
VirtualDesktop(const std::function<void()>& vdInitCallback, const std::function<void()>& vdUpdatedCallback);
~VirtualDesktop();
static VirtualDesktop& instance();
inline bool IsVirtualDesktopIdSavedInRegistry(GUID id) const
{
auto ids = GetVirtualDesktopIdsFromRegistry();
if (!ids.has_value())
{
return false;
}
for (const auto& regId : *ids)
{
if (regId == id)
{
return true;
}
}
return false;
}
void Init();
void UnInit();
std::optional<GUID> GetCurrentVirtualDesktopIdFromRegistry() const;
std::optional<std::vector<GUID>> GetVirtualDesktopIdsFromRegistry() const;
// saved values
GUID GetCurrentVirtualDesktopId() const noexcept;
GUID GetPreviousVirtualDesktopId() const noexcept;
void UpdateVirtualDesktopId() noexcept;
// IVirtualDesktopManager
bool IsWindowOnCurrentDesktop(HWND window) const;
std::optional<GUID> GetDesktopId(HWND window) const;
std::optional<GUID> GetDesktopIdByTopLevelWindows() const;
std::vector<std::pair<HWND, GUID>> GetWindowsRelatedToDesktops() const;
// registry
std::optional<GUID> GetCurrentVirtualDesktopIdFromRegistry() const;
std::optional<std::vector<GUID>> GetVirtualDesktopIdsFromRegistry() const;
bool IsVirtualDesktopIdSavedInRegistry(GUID id) const;
private:
std::function<void()> m_vdInitCallback;
std::function<void()> m_vdUpdatedCallback;
VirtualDesktop();
~VirtualDesktop();
IVirtualDesktopManager* m_vdManager;
IVirtualDesktopManager* m_vdManager{nullptr};
OnThreadExecutor m_virtualDesktopTrackerThread;
wil::unique_handle m_terminateVirtualDesktopTrackerEvent;
GUID m_currentVirtualDesktopId{};
GUID m_previousDesktopId{};
std::optional<std::vector<GUID>> GetVirtualDesktopIdsFromRegistry(HKEY hKey) const;
void HandleVirtualDesktopUpdates();
};