Hypr/src/windowManager.hpp

86 lines
3 KiB
C++
Raw Normal View History

#pragma once
#include "defines.hpp"
#include "window.hpp"
#include <vector>
2021-11-21 11:25:26 +01:00
#include <thread>
#include <xcb/xcb.h>
2021-11-19 20:20:05 +01:00
#include "KeybindManager.hpp"
2021-11-21 11:25:26 +01:00
#include "utilities/Workspace.hpp"
#include "bar/Bar.hpp"
2021-11-21 12:40:03 +01:00
#include "config/ConfigManager.hpp"
2021-11-21 17:40:02 +01:00
#include "utilities/Monitor.hpp"
2021-11-18 22:08:28 +01:00
2021-11-20 09:25:21 +01:00
class CWindowManager {
public:
xcb_connection_t* DisplayConnection;
xcb_screen_t* Screen;
xcb_drawable_t Drawable;
uint32_t Values[3];
2021-11-21 17:40:02 +01:00
std::vector<SMonitor> monitors;
2021-11-21 15:25:57 +01:00
bool modKeyDown = false;
2021-11-21 11:25:26 +01:00
uint8_t Depth = 32;
xcb_visualtype_t* VisualType;
2021-11-20 09:25:21 +01:00
std::vector<CWindow> windows; // windows never left. It has always been hiding amongst us.
xcb_drawable_t LastWindow = -1;
std::vector<CWorkspace> workspaces;
2021-11-21 17:40:02 +01:00
std::vector<CWorkspace*> activeWorkspaces;
2021-11-21 11:25:26 +01:00
CStatusBar statusBar;
std::thread* barThread;
2021-11-21 11:25:26 +01:00
CWindow* getWindowFromDrawable(xcb_drawable_t);
void addWindowToVectorSafe(CWindow);
void removeWindowFromVectorSafe(xcb_drawable_t);
void setupManager();
bool handleEvent();
void refreshDirtyWindows();
void setFocusedWindow(xcb_drawable_t);
void calculateNewWindowParams(CWindow*);
void fixWindowOnClose(CWindow*);
2021-11-19 22:29:44 +01:00
void moveActiveWindowTo(char);
2021-11-19 23:08:59 +01:00
void warpCursorTo(Vector2D);
2021-11-20 09:25:21 +01:00
void changeWorkspaceByID(int);
void setAllWorkspaceWindowsDirtyByID(int);
2021-11-21 11:25:26 +01:00
int getHighestWorkspaceID();
CWorkspace* getWorkspaceByID(int);
2021-11-21 12:40:03 +01:00
void setAllWindowsDirty();
2021-11-21 17:40:02 +01:00
SMonitor* getMonitorFromWindow(CWindow*);
SMonitor* getMonitorFromCursor();
private:
2021-11-20 09:25:21 +01:00
// Internal WM functions that don't have to be exposed
2021-11-21 17:40:02 +01:00
void setupRandrMonitors();
2021-11-20 09:25:21 +01:00
CWindow* getNeighborInDir(char dir);
void eatWindow(CWindow* a, CWindow* toEat);
bool canEatWindow(CWindow* a, CWindow* toEat);
bool isNeighbor(CWindow* a, CWindow* b);
void calculateNewTileSetOldTile(CWindow* pWindow);
2021-11-21 15:15:33 +01:00
void calculateNewFloatingWindow(CWindow* pWindow);
CWindow* findWindowAtCursor();
2021-11-20 09:25:21 +01:00
void setEffectiveSizePosUsingConfig(CWindow* pWindow);
void cleanupUnusedWorkspaces();
2021-11-21 11:25:26 +01:00
xcb_visualtype_t* setupColors();
2021-11-21 17:40:02 +01:00
bool isWorkspaceVisible(int workspaceID);
2021-11-20 09:25:21 +01:00
};
inline std::unique_ptr<CWindowManager> g_pWindowManager = std::make_unique<CWindowManager>();