From fb3bb10eabec9cc692e34f35b354a19fe90a6507 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Mon, 23 Mar 2026 14:46:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=94=A8=E6=88=B7=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=85=8D=E7=BD=AE=E6=8E=A5=E5=8F=A3=E5=A3=B0?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/zdwm/config.h | 48 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/include/zdwm/config.h b/include/zdwm/config.h index 54f0d5b..5620416 100644 --- a/include/zdwm/config.h +++ b/include/zdwm/config.h @@ -5,6 +5,7 @@ #include #include #include +#include #if defined(__cplusplus) extern "C" { @@ -23,19 +24,54 @@ typedef struct zdwm_api_t { uint32_t abi_version; zdwm_builtin_layouts_t builtin_layouts; + /** + * 用户调用这个函数注册布局算法 + * @param builder 配置构建上下文 + * @param name 布局算法名称,不能为 nullptr + * @param symbol 布局算法标志符号,用于在状态栏中显示,不能为 nullptr + * @param description 布局算法描述,可以为 nullptr + * @param fn 布局算法,可以为 nullptr ,如果为 nullptr 则代表不自动布局 + * @returns 返回布局算法对应的布局 id ,如果注册失败,返回 + * ZDWM_LAYOUT_ID_INVALID + */ zdwm_layout_id_t (*register_layout)(zdwm_config_builder_t *builder, const char *name, const char *symbol, const char *description, zdwm_layout_fn fn); - bool (*define_workspace)(zdwm_config_builder_t *builder, size_t output_index, - const char *name, const zdwm_layout_id_t *layout_ids, - size_t layout_count, - zdwm_layout_id_t initial_layout_id); + /** + * 用户调用这个函数添加 output 中的工作空间 + * @param builder 配置构建上下文 + * @param output_index 该工作空间归属的 output 索引 + * @param name 工作空间名称,用于状态栏显示,不能为 nullptr + * @param layout_ids 该工作空间支持的布局算法列表 + * @param layout_count 支持的布局算法总数 + * @param initial_layout_id 初始布局算法 id + * @returns 返回工作空间 id 。如果注册失败,返回 ZDWM_WORKSPACE_ID_INVALID + */ + zdwm_workspace_id_t (*define_workspace)(zdwm_config_builder_t *builder, + size_t output_index, const char *name, + const zdwm_layout_id_t *layout_ids, + size_t layout_count, + zdwm_layout_id_t initial_layout_id); } zdwm_api_t; -bool zdwm_config_setup(const zdwm_api_t *api, zdwm_config_builder_t *builder, - const zdwm_output_info_t *outputs, size_t output_count); +/** + * 用户配置入口函数类型定义 + * @param api 用户自定义时可以使用的 api 接口及数据,api + * 中的函数和信息只能在函数内部使用,如果用户将其保存后在函数外使用是未定义行为 + * @param builder 配置构建上下文 + * @param outputs 屏幕信息列表 + * @param output_count 屏幕个数 + * @returns 用户配置成功返回 true ,配置失败返回 false + */ +typedef bool zdwm_config_setup_fn(const zdwm_api_t *api, + zdwm_config_builder_t *builder, + const zdwm_output_info_t *outputs, + size_t output_count); + +/* 用户在自己的动态链接库配置中必须实现该函数 */ +extern zdwm_config_setup_fn setup; #if defined(__cplusplus) }