/ src / modules / Workspaces / WorkspacesWindowArranger / WindowCreationHandler.h
WindowCreationHandler.h
 1  #pragma once
 2  
 3  class WindowCreationHandler
 4  {
 5  public:
 6      WindowCreationHandler(std::function<void(HWND)> windowCreatedCallback);
 7      ~WindowCreationHandler();
 8  
 9  private:
10      static inline WindowCreationHandler* s_instance = nullptr;
11      std::vector<HWINEVENTHOOK> m_staticWinEventHooks;
12      std::function<void(HWND)> m_windowCreatedCallback;
13  
14      void InitHooks();
15      void HandleWinHookEvent(DWORD event, HWND window) noexcept;
16  
17      static void CALLBACK WinHookProc(HWINEVENTHOOK winEventHook,
18                                       DWORD event,
19                                       HWND window,
20                                       LONG object,
21                                       LONG child,
22                                       DWORD eventThread,
23                                       DWORD eventTime)
24      {
25          if (s_instance)
26          {
27              s_instance->HandleWinHookEvent(event, window);
28          }
29      }
30  };