调整数据类型和接口函数命名规范
This commit is contained in:
181
src/core/state.h
181
src/core/state.h
@@ -6,19 +6,19 @@
|
||||
#include "core/wm_desc.h"
|
||||
|
||||
/* 核心实体定义 */
|
||||
typedef struct wm_window_t {
|
||||
wm_window_id_t id;
|
||||
wm_workspace_id_t workspace_id;
|
||||
typedef struct window_t {
|
||||
window_id_t id;
|
||||
workspace_id_t workspace_id;
|
||||
|
||||
wm_window_geometry_mode_t geometry_mode;
|
||||
window_geometry_mode_t geometry_mode;
|
||||
bool floating;
|
||||
bool sticky;
|
||||
bool urgent;
|
||||
bool fixed_size;
|
||||
|
||||
/* 几何信息(均为包含边框后的外框矩形) */
|
||||
wm_rect_t float_rect; /* floating 模式下记忆的外框矩形 */
|
||||
wm_rect_t frame_rect; /* 当前外框矩形(由 layout 或 float_rect 解析) */
|
||||
rect_t float_rect; /* floating 模式下记忆的外框矩形 */
|
||||
rect_t frame_rect; /* 当前外框矩形(由 layout 或 float_rect 解析) */
|
||||
|
||||
/* 元数据(核心算法不依赖,仅用于规则匹配和信息展示) */
|
||||
const char *title;
|
||||
@@ -27,67 +27,67 @@ typedef struct wm_window_t {
|
||||
const char *instance_name;
|
||||
|
||||
bool skip_taskbar;
|
||||
} wm_window_t;
|
||||
} window_t;
|
||||
|
||||
typedef struct wm_workspace_t {
|
||||
wm_workspace_id_t id;
|
||||
wm_output_id_t output_id; /* 固定归属某个输出 */
|
||||
wm_layout_id_t layout_id; /* 当前活动布局(可用布局列表中的一个) */
|
||||
wm_window_id_t focused_window_id;
|
||||
typedef struct workspace_t {
|
||||
workspace_id_t id;
|
||||
output_id_t output_id; /* 固定归属某个输出 */
|
||||
layout_id_t layout_id; /* 当前活动布局(可用布局列表中的一个) */
|
||||
window_id_t focused_window_id;
|
||||
|
||||
/* 当前 workspace 的可用布局列表 */
|
||||
const wm_layout_id_t *available_layouts;
|
||||
const layout_id_t *available_layouts;
|
||||
size_t layout_count;
|
||||
|
||||
/* 名称(核心算法不依赖) */
|
||||
const char *name;
|
||||
} wm_workspace_t;
|
||||
} workspace_t;
|
||||
|
||||
typedef struct wm_output_t {
|
||||
wm_output_id_t id;
|
||||
wm_workspace_id_t current_workspace_id;
|
||||
typedef struct output_t {
|
||||
output_id_t id;
|
||||
workspace_id_t current_workspace_id;
|
||||
const char *name;
|
||||
wm_rect_t geometry; /* 输出完整几何 */
|
||||
wm_rect_t workarea; /* 可用区域(排除面板等) */
|
||||
} wm_output_t;
|
||||
rect_t geometry; /* 输出完整几何 */
|
||||
rect_t workarea; /* 可用区域(排除面板等) */
|
||||
} output_t;
|
||||
|
||||
/* 全局状态容器 */
|
||||
typedef struct wm_state_t {
|
||||
typedef struct state_t {
|
||||
/* 按 id 稳定引用的 workspace / output 集合 */
|
||||
wm_workspace_t *workspaces;
|
||||
workspace_t *workspaces;
|
||||
size_t workspace_count;
|
||||
|
||||
wm_output_t *outputs;
|
||||
output_t *outputs;
|
||||
size_t output_count;
|
||||
|
||||
wm_window_t *windows;
|
||||
window_t *windows;
|
||||
size_t window_count;
|
||||
size_t window_capacity;
|
||||
|
||||
/* 与 windows[] 一一对应的堆叠顺序视图,长度等于 window_count */
|
||||
wm_window_id_t *stack_order;
|
||||
window_id_t *stack_order;
|
||||
|
||||
} wm_state_t;
|
||||
} state_t;
|
||||
|
||||
/*
|
||||
* 调用约束:
|
||||
* - state 必须是有效的非空指针
|
||||
* - wm_state_init() / wm_state_cleanup() 必须成对调用
|
||||
* - 同一个 state 生命周期内,wm_state_init() 不允许重复调用
|
||||
* - 除 wm_state_init() 外,其余 state 相关接口都要求 state 已初始化
|
||||
* - workspaces[i] 必须满足 wm_workspace_desc_valid(&workspaces[i],
|
||||
* - state_init() / state_cleanup() 必须成对调用
|
||||
* - 同一个 state 生命周期内,state_init() 不允许重复调用
|
||||
* - 除 state_init() 外,其余 state 相关接口都要求 state 已初始化
|
||||
* - workspaces[i] 必须满足 workspace_desc_valid(&workspaces[i],
|
||||
* output_count)
|
||||
* - 传入空指针、未初始化对象或违反前置条件属于调用方错误
|
||||
*
|
||||
* 初始化时根据描述表构建 outputs[] 与 workspaces[]。
|
||||
* workspace_id 由 state 按描述表顺序分配并保持稳定,不从 desc 中读取。
|
||||
* 每个 output 的 current_workspace_id 会自动设置为首个归属到该 output 的
|
||||
* workspace;若某个 output 没有任何归属 workspace,wm_state_init() 会失败。
|
||||
* workspace;若某个 output 没有任何归属 workspace,state_init() 会失败。
|
||||
*/
|
||||
void wm_state_init(wm_state_t *state, const wm_output_info_t *outputs,
|
||||
size_t output_count, const wm_workspace_desc_t *workspaces,
|
||||
void state_init(state_t *state, const output_info_t *outputs,
|
||||
size_t output_count, const workspace_desc_t *workspaces,
|
||||
size_t workspace_count);
|
||||
void wm_state_cleanup(wm_state_t *state);
|
||||
void state_cleanup(state_t *state);
|
||||
|
||||
/*
|
||||
* state 持有的 workspace 集合接口
|
||||
@@ -95,23 +95,22 @@ void wm_state_cleanup(wm_state_t *state);
|
||||
* 这组接口对外只提供只读访问。
|
||||
* workspace 的运行期可变状态必须通过专门的 state 级更新接口修改。
|
||||
*/
|
||||
const wm_workspace_t *wm_state_workspace_get(const wm_state_t *state,
|
||||
wm_workspace_id_t id);
|
||||
const wm_workspace_t *wm_state_workspace_at(const wm_state_t *state,
|
||||
const workspace_t *state_workspace_get(const state_t *state,
|
||||
workspace_id_t id);
|
||||
const workspace_t *state_workspace_at(const state_t *state, size_t index);
|
||||
bool state_workspace_cycle_layout(state_t *state,
|
||||
workspace_id_t workspace_id);
|
||||
bool state_workspace_set_layout_by_index(state_t *state,
|
||||
workspace_id_t workspace_id,
|
||||
size_t index);
|
||||
bool wm_state_workspace_cycle_layout(wm_state_t *state,
|
||||
wm_workspace_id_t workspace_id);
|
||||
bool wm_state_workspace_set_layout_by_index(wm_state_t *state,
|
||||
wm_workspace_id_t workspace_id,
|
||||
size_t index);
|
||||
bool wm_state_workspace_set_layout_by_id(wm_state_t *state,
|
||||
wm_workspace_id_t workspace_id,
|
||||
wm_layout_id_t layout_id);
|
||||
void wm_state_workspace_set_focused_window(wm_state_t *state,
|
||||
wm_workspace_id_t workspace_id,
|
||||
wm_window_id_t window_id);
|
||||
size_t wm_state_workspace_count(const wm_state_t *state);
|
||||
bool wm_state_workspace_valid(const wm_state_t *state, wm_workspace_id_t id);
|
||||
bool state_workspace_set_layout_by_id(state_t *state,
|
||||
workspace_id_t workspace_id,
|
||||
layout_id_t layout_id);
|
||||
void state_workspace_set_focused_window(state_t *state,
|
||||
workspace_id_t workspace_id,
|
||||
window_id_t window_id);
|
||||
size_t state_workspace_count(const state_t *state);
|
||||
bool state_workspace_valid(const state_t *state, workspace_id_t id);
|
||||
|
||||
/*
|
||||
* state 持有的 output 集合接口
|
||||
@@ -119,21 +118,20 @@ bool wm_state_workspace_valid(const wm_state_t *state, wm_workspace_id_t id);
|
||||
* 这组接口对外只提供只读访问。
|
||||
* output 的运行期可变状态必须通过专门的 state 级更新接口修改。
|
||||
*/
|
||||
const wm_output_t *wm_state_output_get(const wm_state_t *state,
|
||||
wm_output_id_t id);
|
||||
const wm_output_t *wm_state_output_at(const wm_state_t *state, size_t index);
|
||||
void wm_state_output_set_workarea(wm_state_t *state, wm_output_id_t output_id,
|
||||
wm_rect_t workarea);
|
||||
void wm_state_output_set_current_workspace(wm_state_t *state,
|
||||
wm_output_id_t output_id,
|
||||
wm_workspace_id_t workspace_id);
|
||||
size_t wm_state_output_count(const wm_state_t *state);
|
||||
bool wm_state_output_valid(const wm_state_t *state, wm_output_id_t id);
|
||||
const output_t *state_output_get(const state_t *state, output_id_t id);
|
||||
const output_t *state_output_at(const state_t *state, size_t index);
|
||||
void state_output_set_workarea(state_t *state, output_id_t output_id,
|
||||
rect_t workarea);
|
||||
void state_output_set_current_workspace(state_t *state,
|
||||
output_id_t output_id,
|
||||
workspace_id_t workspace_id);
|
||||
size_t state_output_count(const state_t *state);
|
||||
bool state_output_valid(const state_t *state, output_id_t id);
|
||||
|
||||
/*
|
||||
* state 持有的 window 集合接口
|
||||
*
|
||||
* 这组接口负责管理 wm_state_t.windows[] 容器本身,并保持
|
||||
* 这组接口负责管理 state_t.windows[] 容器本身,并保持
|
||||
* stack_order[] 与 windows[] 同步。
|
||||
* 对外只提供只读访问。
|
||||
* window 的运行期可变状态必须通过专门的 state 级更新接口修改。
|
||||
@@ -142,54 +140,51 @@ bool wm_state_output_valid(const wm_state_t *state, wm_output_id_t id);
|
||||
* 添加窗口,并将其追加到 stack_order[] 顶部。
|
||||
*
|
||||
* info 提供 backend 已探测到的窗口基础信息。
|
||||
* workspace 归属与其他策略相关字段由后续 wm_state_window_* 接口设置。
|
||||
* workspace 归属与其他策略相关字段由后续 state_window_* 接口设置。
|
||||
*/
|
||||
const wm_window_t *wm_state_window_add(wm_state_t *state,
|
||||
const wm_window_info_t *info);
|
||||
const wm_window_t *wm_state_window_get(const wm_state_t *state,
|
||||
wm_window_id_t id);
|
||||
const wm_window_t *wm_state_window_at(const wm_state_t *state, size_t index);
|
||||
const window_t *state_window_add(state_t *state,
|
||||
const window_info_t *info);
|
||||
const window_t *state_window_get(const state_t *state, window_id_t id);
|
||||
const window_t *state_window_at(const state_t *state, size_t index);
|
||||
/* 删除窗口,并同步从 stack_order[] 中移除。 */
|
||||
void wm_state_window_remove(wm_state_t *state, wm_window_id_t id);
|
||||
size_t wm_state_window_count(const wm_state_t *state);
|
||||
void state_window_remove(state_t *state, window_id_t id);
|
||||
size_t state_window_count(const state_t *state);
|
||||
|
||||
/* state 持有的单个 window 状态更新接口 */
|
||||
void wm_state_window_set_workspace(wm_state_t *state, wm_window_id_t window_id,
|
||||
wm_workspace_id_t workspace_id);
|
||||
void wm_state_window_set_geometry_mode(wm_state_t *state,
|
||||
wm_window_id_t window_id,
|
||||
wm_window_geometry_mode_t geometry_mode);
|
||||
void wm_state_window_set_floating(wm_state_t *state, wm_window_id_t window_id,
|
||||
void state_window_set_workspace(state_t *state, window_id_t window_id,
|
||||
workspace_id_t workspace_id);
|
||||
void state_window_set_geometry_mode(state_t *state, window_id_t window_id,
|
||||
window_geometry_mode_t geometry_mode);
|
||||
void state_window_set_floating(state_t *state, window_id_t window_id,
|
||||
bool floating);
|
||||
void wm_state_window_set_sticky(wm_state_t *state, wm_window_id_t window_id,
|
||||
void state_window_set_sticky(state_t *state, window_id_t window_id,
|
||||
bool sticky);
|
||||
void wm_state_window_set_urgent(wm_state_t *state, wm_window_id_t window_id,
|
||||
void state_window_set_urgent(state_t *state, window_id_t window_id,
|
||||
bool urgent);
|
||||
void wm_state_window_set_fixed_size(wm_state_t *state, wm_window_id_t window_id,
|
||||
void state_window_set_fixed_size(state_t *state, window_id_t window_id,
|
||||
bool fixed_size);
|
||||
void wm_state_window_set_skip_taskbar(wm_state_t *state,
|
||||
wm_window_id_t window_id,
|
||||
void state_window_set_skip_taskbar(state_t *state, window_id_t window_id,
|
||||
bool skip_taskbar);
|
||||
void wm_state_window_set_float_rect(wm_state_t *state, wm_window_id_t window_id,
|
||||
wm_rect_t float_rect);
|
||||
void wm_state_window_set_frame_rect(wm_state_t *state, wm_window_id_t window_id,
|
||||
wm_rect_t frame_rect);
|
||||
bool wm_state_window_set_title(wm_state_t *state, wm_window_id_t window_id,
|
||||
void state_window_set_float_rect(state_t *state, window_id_t window_id,
|
||||
rect_t float_rect);
|
||||
void state_window_set_frame_rect(state_t *state, window_id_t window_id,
|
||||
rect_t frame_rect);
|
||||
bool state_window_set_title(state_t *state, window_id_t window_id,
|
||||
const char *title);
|
||||
bool wm_state_window_set_app_id(wm_state_t *state, wm_window_id_t window_id,
|
||||
bool state_window_set_app_id(state_t *state, window_id_t window_id,
|
||||
const char *app_id);
|
||||
bool wm_state_window_set_class(wm_state_t *state, wm_window_id_t window_id,
|
||||
bool state_window_set_class(state_t *state, window_id_t window_id,
|
||||
const char *class_name);
|
||||
bool wm_state_window_set_instance(wm_state_t *state, wm_window_id_t window_id,
|
||||
bool state_window_set_instance(state_t *state, window_id_t window_id,
|
||||
const char *instance_name);
|
||||
|
||||
/*
|
||||
* state 持有的堆叠顺序接口
|
||||
*
|
||||
* stack_order[] 是全局 z-order 的唯一真相,从下到上排列。
|
||||
* 其长度恒等于 wm_state_window_count(state),因此不提供单独的 count 接口。
|
||||
* 其长度恒等于 state_window_count(state),因此不提供单独的 count 接口。
|
||||
*/
|
||||
const wm_window_id_t *wm_state_stack_order(const wm_state_t *state);
|
||||
wm_window_id_t wm_state_stack_at(const wm_state_t *state, size_t index);
|
||||
bool wm_state_stack_raise(wm_state_t *state, wm_window_id_t window_id);
|
||||
bool wm_state_stack_lower(wm_state_t *state, wm_window_id_t window_id);
|
||||
const window_id_t *state_stack_order(const state_t *state);
|
||||
window_id_t state_stack_at(const state_t *state, size_t index);
|
||||
bool state_stack_raise(state_t *state, window_id_t window_id);
|
||||
bool state_stack_lower(state_t *state, window_id_t window_id);
|
||||
|
||||
Reference in New Issue
Block a user