/* * DWN - Desktop Window Manager * retoor * Main header with shared types and global state */ #ifndef DWN_H #define DWN_H #include #include #include #include #include #include #include #include #define DWN_VERSION "1.0.0" #define DWN_NAME "DWN" #define MAX_CLIENTS 256 #define MAX_WORKSPACES 9 #define MAX_MONITORS 8 #define MAX_NOTIFICATIONS 32 #define MAX_KEYBINDINGS 64 #define DEFAULT_BORDER_WIDTH 2 #define DEFAULT_TITLE_HEIGHT 24 #define DEFAULT_PANEL_HEIGHT 28 #define DEFAULT_GAP 4 typedef enum { DWN_OK = 0, DWN_ERROR = -1, DWN_ERROR_INVALID_ARG = -2, DWN_ERROR_NO_MEMORY = -3, DWN_ERROR_NOT_FOUND = -4, DWN_ERROR_DISPLAY = -5, DWN_ERROR_IO = -6 } DwnStatus; typedef enum { LAYOUT_TILING, LAYOUT_FLOATING, LAYOUT_MONOCLE, LAYOUT_COUNT } LayoutType; typedef enum { FOCUS_CLICK, FOCUS_FOLLOW } FocusMode; typedef enum { CLIENT_NORMAL = 0, CLIENT_FLOATING = (1 << 0), CLIENT_FULLSCREEN = (1 << 1), CLIENT_URGENT = (1 << 2), CLIENT_MINIMIZED = (1 << 3), CLIENT_STICKY = (1 << 4), CLIENT_MAXIMIZED = (1 << 5) } ClientFlags; typedef enum { SNAP_H_NONE = 0, SNAP_H_LEFT, SNAP_H_RIGHT, SNAP_H_FULL } SnapHorizontal; typedef enum { SNAP_V_NONE = 0, SNAP_V_TOP, SNAP_V_BOTTOM, SNAP_V_FULL } SnapVertical; typedef struct { SnapHorizontal horizontal; SnapVertical vertical; long timestamp; } SnapConstraint; typedef struct Client Client; typedef struct Workspace Workspace; typedef struct Monitor Monitor; typedef struct Panel Panel; typedef struct Config Config; struct Client { Window window; Window frame; int x, y; int width, height; int old_x, old_y; int old_width, old_height; int border_width; uint32_t flags; unsigned int workspace; char title[256]; char class[64]; SnapConstraint snap; Client *next; Client *prev; Client *mru_next; Client *mru_prev; }; struct Monitor { int x, y; int width, height; int index; bool primary; }; struct Workspace { Client *clients; Client *focused; Client *mru_head; Client *mru_tail; LayoutType layout; float master_ratio; int master_count; char name[32]; }; typedef enum { WIDGET_WORKSPACES, WIDGET_TASKBAR, WIDGET_CLOCK, WIDGET_SYSTRAY, WIDGET_AI_STATUS, WIDGET_SEPARATOR } WidgetType; typedef struct { Display *display; int screen; Window root; int screen_width; int screen_height; Monitor monitors[MAX_MONITORS]; int monitor_count; Workspace workspaces[MAX_WORKSPACES]; int current_workspace; Client *client_list; int client_count; Panel *top_panel; Panel *bottom_panel; Config *config; bool running; bool ai_enabled; GC gc; XFontStruct *font; XftFont *xft_font; Colormap colormap; Client *drag_client; int drag_start_x, drag_start_y; int drag_orig_x, drag_orig_y; int drag_orig_w, drag_orig_h; bool resizing; Client *pending_focus_client; long pending_focus_time; } DWNState; extern DWNState *dwn; int dwn_init(void); void dwn_cleanup(void); void dwn_run(void); void dwn_quit(void); void dwn_handle_event(XEvent *ev); #endif