core: 定义核心事件数据模型并更新其文档
This commit is contained in:
64
src/core/wm_desc.h
Normal file
64
src/core/wm_desc.h
Normal file
@@ -0,0 +1,64 @@
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "core/types.h"
|
||||
|
||||
typedef struct wm_output_info_t {
|
||||
char *name;
|
||||
wm_rect_t geometry;
|
||||
} wm_output_info_t;
|
||||
|
||||
/*
|
||||
* 由 backend 提供的窗口基础信息。
|
||||
*
|
||||
* 这些字符串由调用方提供;state 如需长期持有,应自行复制。
|
||||
*/
|
||||
typedef struct wm_window_info_t {
|
||||
wm_window_id_t id;
|
||||
wm_rect_t frame_rect;
|
||||
|
||||
const char *title;
|
||||
const char *app_id;
|
||||
const char *class_name;
|
||||
const char *instance_name;
|
||||
|
||||
wm_window_geometry_mode_t geometry_mode;
|
||||
bool urgent;
|
||||
bool fixed_size;
|
||||
bool skip_taskbar;
|
||||
} wm_window_info_t;
|
||||
|
||||
typedef struct wm_workspace_desc_t {
|
||||
size_t output_index; /* 对应 wm_state_init() 中 outputs[] 的索引 */
|
||||
const char *name;
|
||||
const wm_layout_id_t *layout_ids;
|
||||
size_t layout_count;
|
||||
wm_layout_id_t initial_layout_id;
|
||||
} wm_workspace_desc_t;
|
||||
|
||||
/*
|
||||
* workspace 描述校验接口。
|
||||
*
|
||||
* 这组接口只校验描述表自身的一致性,不访问 state。
|
||||
*/
|
||||
static inline bool wm_workspace_desc_layouts_valid(
|
||||
const wm_workspace_desc_t *workspace) {
|
||||
if (!workspace || !workspace->layout_count || !workspace->layout_ids) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < workspace->layout_count; i++) {
|
||||
if (workspace->layout_ids[i] == workspace->initial_layout_id) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool wm_workspace_desc_valid(const wm_workspace_desc_t *workspace,
|
||||
size_t output_count) {
|
||||
if (!workspace || !workspace->name) return false;
|
||||
if (workspace->output_index >= output_count) return false;
|
||||
|
||||
return wm_workspace_desc_layouts_valid(workspace);
|
||||
}
|
||||
Reference in New Issue
Block a user