/* * DWN - Desktop Window Manager * Abstract Workspace Interface */ #ifndef WM_WORKSPACE_H #define WM_WORKSPACE_H #include "wm_types.h" #include "wm_client.h" #ifdef __cplusplus extern "C" { #endif /*============================================================================== * Workspace Configuration *============================================================================*/ #define WM_MAX_WORKSPACES 32 typedef struct { WmLayoutType layout_type; float master_ratio; int master_count; char name[64]; bool persistent; WmString *custom_data; } WmWorkspaceConfig; /*============================================================================== * Workspace Lifecycle *============================================================================*/ bool wm_workspace_exists(WmCore *core, WmWorkspaceId id); WmWorkspaceId wm_workspace_create(WmCore *core, const char *name); void wm_workspace_destroy(WmCore *core, WmWorkspaceId id); void wm_workspace_init_all(WmCore *core); void wm_workspace_cleanup_all(WmCore *core); /*============================================================================== * Workspace Properties *============================================================================*/ const char* wm_workspace_get_name(WmCore *core, WmWorkspaceId id); void wm_workspace_set_name(WmCore *core, WmWorkspaceId id, const char *name); bool wm_workspace_is_empty(WmCore *core, WmWorkspaceId id); size_t wm_workspace_get_client_count(WmCore *core, WmWorkspaceId id); /*============================================================================== * Current Workspace *============================================================================*/ WmWorkspaceId wm_workspace_get_current(WmCore *core); void wm_workspace_set_current(WmCore *core, WmWorkspaceId id); void wm_workspace_switch(WmCore *core, WmWorkspaceId id); void wm_workspace_switch_next(WmCore *core); void wm_workspace_switch_prev(WmCore *core); /*============================================================================== * Client Management *============================================================================*/ void wm_workspace_add_client(WmCore *core, WmWorkspaceId id, AbstractClient *client); void wm_workspace_remove_client(WmCore *core, WmWorkspaceId id, AbstractClient *client); void wm_workspace_move_client(WmCore *core, AbstractClient *client, WmWorkspaceId to_workspace); WmContainer* wm_workspace_get_clients(WmCore *core, WmWorkspaceId id); AbstractClient* wm_workspace_get_focused_client(WmCore *core, WmWorkspaceId id); void wm_workspace_set_focused_client(WmCore *core, WmWorkspaceId id, AbstractClient *client); AbstractClient* wm_workspace_get_first_client(WmCore *core, WmWorkspaceId id); AbstractClient* wm_workspace_get_last_client(WmCore *core, WmWorkspaceId id); /*============================================================================== * Layout Management *============================================================================*/ WmLayoutType wm_workspace_get_layout(WmCore *core, WmWorkspaceId id); void wm_workspace_set_layout(WmCore *core, WmWorkspaceId id, WmLayoutType layout); void wm_workspace_cycle_layout(WmCore *core, WmWorkspaceId id); void wm_workspace_cycle_layout_reverse(WmCore *core, WmWorkspaceId id); float wm_workspace_get_master_ratio(WmCore *core, WmWorkspaceId id); void wm_workspace_set_master_ratio(WmCore *core, WmWorkspaceId id, float ratio); void wm_workspace_adjust_master_ratio(WmCore *core, WmWorkspaceId id, float delta); int wm_workspace_get_master_count(WmCore *core, WmWorkspaceId id); void wm_workspace_set_master_count(WmCore *core, WmWorkspaceId id, int count); void wm_workspace_adjust_master_count(WmCore *core, WmWorkspaceId id, int delta); /*============================================================================== * Workspace Arrangement *============================================================================*/ void wm_workspace_arrange(WmCore *core, WmWorkspaceId id); void wm_workspace_arrange_all(WmCore *core); void wm_workspace_arrange_current(WmCore *core); WmRect wm_workspace_get_arrange_area(WmCore *core, WmWorkspaceId id); /*============================================================================== * Workspace Visibility *============================================================================*/ void wm_workspace_show(WmCore *core, WmWorkspaceId id); void wm_workspace_hide(WmCore *core, WmWorkspaceId id); bool wm_workspace_is_visible(WmCore *core, WmWorkspaceId id); /*============================================================================== * Focus Management *============================================================================*/ void wm_workspace_focus_next(WmCore *core, WmWorkspaceId id); void wm_workspace_focus_prev(WmCore *core, WmWorkspaceId id); void wm_workspace_focus_master(WmCore *core, WmWorkspaceId id); /*============================================================================== * MRU (Most Recently Used) Stack *============================================================================*/ void wm_workspace_mru_push(WmCore *core, WmWorkspaceId id, AbstractClient *client); void wm_workspace_mru_remove(WmCore *core, WmWorkspaceId id, AbstractClient *client); AbstractClient* wm_workspace_mru_get_next(WmCore *core, WmWorkspaceId id, AbstractClient *current); AbstractClient* wm_workspace_mru_get_prev(WmCore *core, WmWorkspaceId id, AbstractClient *current); /*============================================================================== * Alt-Tab Navigation *============================================================================*/ void wm_workspace_alt_tab_start(WmCore *core, WmWorkspaceId id); void wm_workspace_alt_tab_next(WmCore *core, WmWorkspaceId id); void wm_workspace_alt_tab_prev(WmCore *core, WmWorkspaceId id); void wm_workspace_alt_tab_end(WmCore *core, WmWorkspaceId id); bool wm_workspace_alt_tab_is_active(WmCore *core, WmWorkspaceId id); /*============================================================================== * Workspace Iteration *============================================================================*/ WmWorkspaceId wm_workspace_get_first(WmCore *core); WmWorkspaceId wm_workspace_get_last(WmCore *core); WmWorkspaceId wm_workspace_get_next(WmCore *core, WmWorkspaceId id); WmWorkspaceId wm_workspace_get_prev(WmCore *core, WmWorkspaceId id); /*============================================================================== * Configuration *============================================================================*/ void wm_workspace_save_config(WmCore *core, WmWorkspaceId id, const WmWorkspaceConfig *config); bool wm_workspace_load_config(WmCore *core, WmWorkspaceId id, WmWorkspaceConfig *config); #ifdef __cplusplus } #endif #endif /* WM_WORKSPACE_H */