- wm_workspace_t 新增 available_layouts 和 layout_count 字段 - 新增 WM_COMMAND_CYCLE_LAYOUT 命令支持循环切换布局 - 添加 workspace 布局列表操作 API - 完善命令规则和实现骨架 - 新增布局列表配置示例和文档
144 lines
3.1 KiB
C
144 lines
3.1 KiB
C
#pragma once
|
|
|
|
#include "wm_types.h"
|
|
|
|
typedef struct wm_manage_window_init_t {
|
|
wm_window_geometry_mode_t geometry_mode;
|
|
bool floating;
|
|
bool sticky;
|
|
bool urgent;
|
|
bool set_focus;
|
|
} wm_manage_window_init_t;
|
|
|
|
typedef enum wm_command_type_t {
|
|
WM_COMMAND_NONE,
|
|
WM_COMMAND_MANAGE_WINDOW,
|
|
WM_COMMAND_UNMANAGE_WINDOW,
|
|
WM_COMMAND_UPSERT_OUTPUT,
|
|
WM_COMMAND_REMOVE_OUTPUT,
|
|
WM_COMMAND_FOCUS_WINDOW,
|
|
WM_COMMAND_FOCUS_DIRECTION,
|
|
WM_COMMAND_RAISE_WINDOW,
|
|
WM_COMMAND_LOWER_WINDOW,
|
|
WM_COMMAND_SWITCH_WORKSPACE,
|
|
WM_COMMAND_SEND_WINDOW_TO_WORKSPACE,
|
|
WM_COMMAND_SEND_WINDOW_TO_OUTPUT,
|
|
WM_COMMAND_TOGGLE_FLOATING,
|
|
WM_COMMAND_TOGGLE_STICKY,
|
|
WM_COMMAND_TOGGLE_MAXIMIZE,
|
|
WM_COMMAND_TOGGLE_FULLSCREEN,
|
|
WM_COMMAND_TOGGLE_MINIMIZE,
|
|
WM_COMMAND_MOVE_FLOATING_WINDOW,
|
|
WM_COMMAND_RESIZE_FLOATING_WINDOW,
|
|
WM_COMMAND_SET_LAYOUT,
|
|
WM_COMMAND_CYCLE_LAYOUT,
|
|
WM_COMMAND_REDRAW,
|
|
WM_COMMAND_QUIT,
|
|
} wm_command_type_t;
|
|
|
|
typedef struct wm_command_t {
|
|
wm_command_type_t type;
|
|
union {
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
wm_workspace_id_t workspace_id;
|
|
wm_manage_window_init_t initial_state;
|
|
bool has_initial_float_rect;
|
|
wm_rect_t initial_float_rect;
|
|
} manage_window;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} unmanage_window;
|
|
|
|
struct {
|
|
wm_output_id_t output_id;
|
|
wm_rect_t geometry;
|
|
wm_rect_t workarea;
|
|
wm_workspace_id_t initial_workspace_id;
|
|
} upsert_output;
|
|
|
|
struct {
|
|
wm_output_id_t output_id;
|
|
} remove_output;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} focus_window;
|
|
|
|
struct {
|
|
wm_output_id_t output_id;
|
|
wm_focus_direction_t direction;
|
|
} focus_direction;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} raise_window;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} lower_window;
|
|
|
|
struct {
|
|
wm_output_id_t output_id;
|
|
wm_workspace_id_t workspace_id;
|
|
} switch_workspace;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
wm_workspace_id_t workspace_id;
|
|
} send_window_to_workspace;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
wm_output_id_t output_id;
|
|
wm_cross_output_policy_t policy;
|
|
} send_window_to_output;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} toggle_floating;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} toggle_sticky;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} toggle_maximize;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} toggle_fullscreen;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} toggle_minimize;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
int16_t dx;
|
|
int16_t dy;
|
|
bool commit_workspace_change;
|
|
wm_point_t anchor;
|
|
wm_cross_output_policy_t policy;
|
|
} move_floating_window;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
int16_t dw;
|
|
int16_t dh;
|
|
} resize_floating_window;
|
|
|
|
struct {
|
|
wm_workspace_id_t workspace_id;
|
|
wm_layout_id_t layout_id;
|
|
} set_layout;
|
|
|
|
struct {
|
|
wm_workspace_id_t workspace_id;
|
|
int direction; // 1: 下一个布局, -1: 上一个布局
|
|
} cycle_layout;
|
|
} as;
|
|
} wm_command_t;
|