feat: add maximize window functionality and MRU-based focus management

feat: add focus follow delay configuration
feat: add demo mode timing configurations and wait conditions
docs: update configuration documentation for new options
This commit is contained in:
2025-12-28 10:23:03 +01:00
parent d0b1669cb4
commit 395583aea9
31 changed files with 896 additions and 208 deletions
+3
View File
@@ -35,11 +35,14 @@ void client_update_title(Client *client);
void client_update_class(Client *client);
void client_set_fullscreen(Client *client, bool fullscreen);
void client_toggle_fullscreen(Client *client);
void client_set_maximize(Client *client, bool maximized);
void client_toggle_maximize(Client *client);
void client_set_floating(Client *client, bool floating);
void client_toggle_floating(Client *client);
bool client_is_floating(Client *client);
bool client_is_fullscreen(Client *client);
bool client_is_maximized(Client *client);
bool client_is_minimized(Client *client);
bool client_is_dialog(Window window);
bool client_is_dock(Window window);
+5
View File
@@ -31,6 +31,7 @@ struct Config {
char launcher[128];
char file_manager[128];
FocusMode focus_mode;
int focus_follow_delay_ms;
bool show_decorations;
int border_width;
@@ -58,6 +59,10 @@ struct Config {
bool autostart_enabled;
bool autostart_xdg;
char autostart_path[512];
int demo_step_delay_ms;
int demo_ai_timeout_ms;
int demo_window_timeout_ms;
};
Config *config_create(void);
+8
View File
@@ -23,6 +23,14 @@ typedef enum {
DEMO_COMPLETE
} DemoPhase;
typedef enum {
DEMO_WAIT_NONE,
DEMO_WAIT_TIME,
DEMO_WAIT_WINDOW_SPAWN,
DEMO_WAIT_AI_RESPONSE,
DEMO_WAIT_EXA_RESPONSE
} DemoWaitCondition;
void demo_init(void);
void demo_cleanup(void);
void demo_start(void);
+9 -1
View File
@@ -58,7 +58,8 @@ typedef enum {
CLIENT_FULLSCREEN = (1 << 1),
CLIENT_URGENT = (1 << 2),
CLIENT_MINIMIZED = (1 << 3),
CLIENT_STICKY = (1 << 4)
CLIENT_STICKY = (1 << 4),
CLIENT_MAXIMIZED = (1 << 5)
} ClientFlags;
typedef struct Client Client;
@@ -81,6 +82,8 @@ struct Client {
char class[64];
Client *next;
Client *prev;
Client *mru_next;
Client *mru_prev;
};
struct Monitor {
@@ -93,6 +96,8 @@ struct Monitor {
struct Workspace {
Client *clients;
Client *focused;
Client *mru_head;
Client *mru_tail;
LayoutType layout;
float master_ratio;
int master_count;
@@ -142,6 +147,9 @@ typedef struct {
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;
+4
View File
@@ -50,4 +50,8 @@ void workspace_focus_next(void);
void workspace_focus_prev(void);
void workspace_focus_master(void);
void workspace_mru_push(int workspace, Client *client);
void workspace_mru_remove(int workspace, Client *client);
Client *workspace_mru_get_previous(int workspace, Client *current);
#endif