引入 interface/(零实现声明层)与 common/(共享 ADT 操作层),把跨模块
契约从 core 实现里抽出来,依赖方向回到单向(base ← interface ← common ←
各实现层)。docs/module-layering.org 记录完整方案与判定标准。
interface/(纯类型与多态接口声明,零 .c):
- types.h / event.h / backend.h 从 core 移入
- effect.h 新建(effect_t 从 plan.h 抽出)
common/(多实现层共用的自包含操作,.h + .c):
- event.{h,c}:event_reset / event_cleanup
- listeners.{h,c}:listeners 维护(add / cleanup);notify 留 core
- window.{h,c}:window_list + layer_props/metadata cleanup + window_classify_layer
- workspace.{h,c}:workspace_desc(从 wm_desc.h 拆出,改真实函数)
window 相关整理:
- window_layer_type_t 上浮 interface/types.h(common 的 classify 需要)
- window_classify_layer 移 common/window
- window_info_t 独立成 core/window_info.h(state/command 共享,不寄生)
- 删除 wm_desc.h,base/window_list 并入 common/window
全项目 include 路径同步更新
47 lines
1.1 KiB
C
47 lines
1.1 KiB
C
#include "common/workspace.h"
|
|
|
|
#include "base/memory.h"
|
|
|
|
void workspace_desc_cleanup(workspace_desc_t *workspace) {
|
|
if (!workspace) return;
|
|
|
|
p_delete(&workspace->name);
|
|
p_delete(&workspace->layout_ids);
|
|
workspace->output_index = 0;
|
|
workspace->layout_count = 0;
|
|
workspace->initial_layout_id = ZDWM_LAYOUT_ID_INVALID;
|
|
}
|
|
|
|
void workspace_desc_list_cleanup(workspace_desc_t **list, size_t *count) {
|
|
if (!list || !count) return;
|
|
|
|
for (size_t i = 0; i < *count; i++) {
|
|
workspace_desc_cleanup(&(*list)[i]);
|
|
}
|
|
|
|
p_delete(list);
|
|
*count = 0;
|
|
}
|
|
|
|
bool workspace_desc_layouts_valid(const 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;
|
|
}
|
|
|
|
bool workspace_desc_valid(
|
|
const workspace_desc_t *workspace,
|
|
size_t output_count
|
|
) {
|
|
if (!workspace || !workspace->name) return false;
|
|
if (workspace->output_index >= output_count) return false;
|
|
|
|
return workspace_desc_layouts_valid(workspace);
|
|
}
|