WindowArranger.h
 1  #pragma once
 2  
 3  #include <WindowCreationHandler.h>
 4  
 5  #include <WorkspacesLib/AppUtils.h>
 6  #include <WorkspacesLib/IPCHelper.h>
 7  #include <WorkspacesLib/LaunchingStatus.h>
 8  #include <WorkspacesLib/PwaHelper.h>
 9  #include <WorkspacesLib/WorkspacesData.h>
10  
11  struct WindowWithDistance
12  {
13      int distance;
14      HWND window;
15  };
16  
17  class WindowArranger
18  {
19  public:
20      WindowArranger(WorkspacesData::WorkspacesProject project);
21      ~WindowArranger() = default;
22  
23  private:
24      const WorkspacesData::WorkspacesProject m_project;
25      const std::vector<HWND> m_windowsBefore;
26      const std::vector<WorkspacesData::WorkspacesProject::Monitor> m_monitors;
27      const Utils::Apps::AppList m_installedApps;
28      //const WindowCreationHandler m_windowCreationHandler;
29      IPCHelper m_ipcHelper;
30      LaunchingStatus m_launchingStatus;
31      std::optional<WindowWithDistance> GetNearestWindow(const WorkspacesData::WorkspacesProject::Application& app, const std::vector<HWND>& movedWindows, Utils::PwaHelper& pwaHelper);
32      bool TryMoveWindow(const WorkspacesData::WorkspacesProject::Application& app, HWND windowToMove);
33  
34      //void onWindowCreated(HWND window);
35      bool processWindows(bool processAll);
36      bool processWindow(HWND window);
37      bool moveWindow(HWND window, const WorkspacesData::WorkspacesProject::Application& app);
38  
39      void receiveIpcMessage(const std::wstring& message);
40      void sendUpdatedState(const WorkspacesData::LaunchingAppState& data) const;
41  };