style: 更新 .clang-format 规则并重新格式化所有源文件
- 重构模块使用新的代码风格 - 老代码 (src 目录下的代码) 继续使用之前的代码风格 通过在需要不同代码风格的目录下放对应 .clang-format 配置文件实现
This commit is contained in:
@@ -24,8 +24,10 @@ typedef struct wm_backend_api_t {
|
||||
* X11 这类需要被动抓键的平台可以在这里建立平台侧 grab;
|
||||
* 总能收到所有键盘事件的 backend 可以把它留空。
|
||||
*/
|
||||
bool (*set_keybindings)(wm_backend_t *backend,
|
||||
const wm_key_binding_table_t *keybindings);
|
||||
bool (*set_keybindings)(
|
||||
wm_backend_t *backend,
|
||||
const wm_key_binding_table_t *keybindings
|
||||
);
|
||||
/*
|
||||
* 安装 bootstrap 固定下来的鼠标按键绑定表。
|
||||
* X11 这类需要被动抓按钮的平台可以把它缓存下来,并在 root 或新受管窗口
|
||||
@@ -33,13 +35,17 @@ typedef struct wm_backend_api_t {
|
||||
* 可以把它留空。
|
||||
*/
|
||||
bool (*set_pointer_bindings)(
|
||||
wm_backend_t *backend,
|
||||
const wm_pointer_binding_table_t *pointer_bindings);
|
||||
wm_backend_t *backend,
|
||||
const wm_pointer_binding_table_t *pointer_bindings
|
||||
);
|
||||
/*
|
||||
* 返回一个 backend 轮询结果。
|
||||
* 只有返回 WM_BACKEND_NEXT_EVENT 时,out 才包含一个完整的 runtime 输入事件。
|
||||
*/
|
||||
wm_backend_next_result_t (*next_event)(wm_backend_t *backend, wm_event_t *out);
|
||||
wm_backend_next_result_t (*next_event)(
|
||||
wm_backend_t *backend,
|
||||
wm_event_t *out
|
||||
);
|
||||
/*
|
||||
* Runtime filters out service-side effects such as WM_EFFECT_RENDER_OUTPUT.
|
||||
* Backends only receive platform effects here.
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "wm_command.h"
|
||||
#include "wm_types.h"
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
/*
|
||||
* 输入绑定只匹配 backend 已归一化后的输入事件。
|
||||
@@ -71,8 +72,10 @@ typedef struct wm_pointer_binding_table_t {
|
||||
* 出现在 key binding table 里。
|
||||
*/
|
||||
const wm_key_binding_t *wm_key_binding_find(
|
||||
const wm_key_binding_table_t *table, wm_keysym_t keysym,
|
||||
wm_modifier_mask_t modifiers);
|
||||
const wm_key_binding_table_t *table,
|
||||
wm_keysym_t keysym,
|
||||
wm_modifier_mask_t modifiers
|
||||
);
|
||||
|
||||
/*
|
||||
* 查找与当前按钮按下事件匹配的鼠标绑定。
|
||||
@@ -82,5 +85,8 @@ const wm_key_binding_t *wm_key_binding_find(
|
||||
* 匹配顺序与键盘绑定一致:先 exact,再 allow-extra-modifiers。
|
||||
*/
|
||||
const wm_pointer_binding_t *wm_pointer_binding_find(
|
||||
const wm_pointer_binding_table_t *table, wm_button_t button,
|
||||
wm_modifier_mask_t modifiers, bool hits_window);
|
||||
const wm_pointer_binding_table_t *table,
|
||||
wm_button_t button,
|
||||
wm_modifier_mask_t modifiers,
|
||||
bool hits_window
|
||||
);
|
||||
|
||||
@@ -71,7 +71,8 @@ typedef struct wm_pointer_enter_event_t {
|
||||
wm_point_t root;
|
||||
// 相对 window 的坐标;若 window == WM_WINDOW_ID_INVALID,则该值未定义
|
||||
wm_point_t local;
|
||||
// 当前进入并获得 pointer focus 的窗口;若未命中窗口,则为 WM_WINDOW_ID_INVALID
|
||||
// 当前进入并获得 pointer focus 的窗口;若未命中窗口,则为
|
||||
// WM_WINDOW_ID_INVALID
|
||||
wm_window_id_t window;
|
||||
} wm_pointer_enter_event_t;
|
||||
|
||||
@@ -99,10 +100,10 @@ typedef struct wm_window_remove_event_t {
|
||||
} wm_window_remove_event_t;
|
||||
|
||||
typedef enum wm_window_meta_changed_flags_t {
|
||||
WM_WINDOW_META_CHANGED_NONE = 0,
|
||||
WM_WINDOW_META_CHANGED_TITLE = 1u << 0,
|
||||
WM_WINDOW_META_CHANGED_APP_ID = 1u << 1,
|
||||
WM_WINDOW_META_CHANGED_CLASS = 1u << 2,
|
||||
WM_WINDOW_META_CHANGED_NONE = 0,
|
||||
WM_WINDOW_META_CHANGED_TITLE = 1u << 0,
|
||||
WM_WINDOW_META_CHANGED_APP_ID = 1u << 1,
|
||||
WM_WINDOW_META_CHANGED_CLASS = 1u << 2,
|
||||
WM_WINDOW_META_CHANGED_INSTANCE = 1u << 3,
|
||||
} wm_window_meta_changed_flags_t;
|
||||
|
||||
@@ -122,9 +123,9 @@ typedef struct wm_window_metadata_changed_event_t {
|
||||
} wm_window_metadata_changed_event_t;
|
||||
|
||||
typedef enum wm_window_hint_changed_flags_t {
|
||||
WM_WINDOW_HINT_CHANGED_NONE = 0,
|
||||
WM_WINDOW_HINT_CHANGED_URGENT = 1u << 0,
|
||||
WM_WINDOW_HINT_CHANGED_FIXED_SIZE = 1u << 1,
|
||||
WM_WINDOW_HINT_CHANGED_NONE = 0,
|
||||
WM_WINDOW_HINT_CHANGED_URGENT = 1u << 0,
|
||||
WM_WINDOW_HINT_CHANGED_FIXED_SIZE = 1u << 1,
|
||||
WM_WINDOW_HINT_CHANGED_SKIP_TASKBAR = 1u << 2,
|
||||
} wm_window_hint_changed_flags_t;
|
||||
|
||||
@@ -149,9 +150,9 @@ typedef struct wm_window_hints_changed_event_t {
|
||||
* - 2: pager / taskbar / window switcher 发起
|
||||
*/
|
||||
typedef enum wm_window_activation_source_t {
|
||||
WM_WINDOW_ACTIVATION_SOURCE_LEGACY = 0,
|
||||
WM_WINDOW_ACTIVATION_SOURCE_LEGACY = 0,
|
||||
WM_WINDOW_ACTIVATION_SOURCE_APPLICATION = 1,
|
||||
WM_WINDOW_ACTIVATION_SOURCE_PAGER = 2,
|
||||
WM_WINDOW_ACTIVATION_SOURCE_PAGER = 2,
|
||||
} wm_window_activation_source_t;
|
||||
|
||||
typedef struct wm_window_activate_request_event_t {
|
||||
@@ -183,10 +184,10 @@ typedef struct wm_window_state_request_event_t {
|
||||
} wm_window_state_request_event_t;
|
||||
|
||||
typedef enum wm_configure_request_field_t {
|
||||
WM_CONFIGURE_REQUEST_FIELD_NONE = 0,
|
||||
WM_CONFIGURE_REQUEST_FIELD_X = 1u << 0,
|
||||
WM_CONFIGURE_REQUEST_FIELD_Y = 1u << 1,
|
||||
WM_CONFIGURE_REQUEST_FIELD_WIDTH = 1u << 2,
|
||||
WM_CONFIGURE_REQUEST_FIELD_NONE = 0,
|
||||
WM_CONFIGURE_REQUEST_FIELD_X = 1u << 0,
|
||||
WM_CONFIGURE_REQUEST_FIELD_Y = 1u << 1,
|
||||
WM_CONFIGURE_REQUEST_FIELD_WIDTH = 1u << 2,
|
||||
WM_CONFIGURE_REQUEST_FIELD_HEIGHT = 1u << 3,
|
||||
} wm_configure_request_field_t;
|
||||
|
||||
|
||||
@@ -27,8 +27,10 @@ typedef struct wm_layout_result_t {
|
||||
size_t item_capacity;
|
||||
} wm_layout_result_t;
|
||||
|
||||
typedef bool (*wm_layout_fn)(const wm_layout_ctx_t *ctx,
|
||||
wm_layout_result_t *out);
|
||||
typedef bool (*wm_layout_fn)(
|
||||
const wm_layout_ctx_t *ctx,
|
||||
wm_layout_result_t *out
|
||||
);
|
||||
|
||||
typedef struct wm_layout_slot_t {
|
||||
wm_layout_id_t id;
|
||||
@@ -67,17 +69,20 @@ bool wm_layout_result_push(wm_layout_result_t *result, wm_layout_item_t item);
|
||||
void wm_layout_registry_init(wm_layout_registry_t *registry);
|
||||
void wm_layout_registry_shutdown(wm_layout_registry_t *registry);
|
||||
size_t wm_layout_registry_count(const wm_layout_registry_t *registry);
|
||||
const wm_layout_slot_t *wm_layout_registry_at(
|
||||
const wm_layout_registry_t *registry, size_t index);
|
||||
const wm_layout_slot_t *
|
||||
wm_layout_registry_at(const wm_layout_registry_t *registry, size_t index);
|
||||
|
||||
wm_layout_id_t wm_layout_register(wm_layout_registry_t *registry,
|
||||
const char *name, const char *symbol,
|
||||
wm_layout_fn fn);
|
||||
wm_layout_id_t wm_layout_register(
|
||||
wm_layout_registry_t *registry,
|
||||
const char *name,
|
||||
const char *symbol,
|
||||
wm_layout_fn fn
|
||||
);
|
||||
/*
|
||||
* layout registry 只允许在 bootstrap / 初始化阶段注册。
|
||||
* 运行时布局集合保持固定,只允许切换 workspace 当前选中的 layout_id。
|
||||
*/
|
||||
wm_layout_fn wm_layout_lookup(const wm_layout_registry_t *registry,
|
||||
wm_layout_id_t id);
|
||||
const wm_layout_slot_t *wm_layout_slot_get(const wm_layout_registry_t *registry,
|
||||
wm_layout_id_t id);
|
||||
wm_layout_fn
|
||||
wm_layout_lookup(const wm_layout_registry_t *registry, wm_layout_id_t id);
|
||||
const wm_layout_slot_t *
|
||||
wm_layout_slot_get(const wm_layout_registry_t *registry, wm_layout_id_t id);
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
#include "wm_types.h"
|
||||
|
||||
typedef enum wm_dirty_flags_t {
|
||||
WM_DIRTY_NONE = 0,
|
||||
WM_DIRTY_STATE = 1u << 0,
|
||||
WM_DIRTY_NONE = 0,
|
||||
WM_DIRTY_STATE = 1u << 0,
|
||||
WM_DIRTY_LAYOUT = 1u << 1,
|
||||
WM_DIRTY_STACK = 1u << 2,
|
||||
WM_DIRTY_STACK = 1u << 2,
|
||||
WM_DIRTY_OUTPUT = 1u << 3,
|
||||
// 只影响窗口装饰,不改变 layout 结果;例如焦点切换导致边框颜色变化
|
||||
WM_DIRTY_DECORATION = 1u << 4,
|
||||
WM_DIRTY_RENDER = 1u << 5,
|
||||
WM_DIRTY_RENDER = 1u << 5,
|
||||
} wm_dirty_flags_t;
|
||||
|
||||
typedef enum wm_effect_type_t {
|
||||
@@ -36,8 +36,8 @@ typedef struct wm_effect_t {
|
||||
|
||||
struct {
|
||||
wm_window_id_t window_id;
|
||||
wm_rect_t rect; // 最终外框矩形(包含边框)
|
||||
uint16_t border_width; // runtime 解析出的有效边框宽度
|
||||
wm_rect_t rect; // 最终外框矩形(包含边框)
|
||||
uint16_t border_width; // runtime 解析出的有效边框宽度
|
||||
wm_rgba32_t border_rgba; // runtime 解析出的有效边框颜色
|
||||
} configure_window;
|
||||
|
||||
|
||||
@@ -20,14 +20,19 @@ void wm_command_buffer_shutdown(wm_command_buffer_t *buffer);
|
||||
|
||||
bool wm_command_buffer_push(wm_command_buffer_t *buffer, wm_command_t command);
|
||||
|
||||
bool wm_policy_route_event(const wm_state_t *state,
|
||||
const wm_policy_config_t *policy,
|
||||
const wm_key_binding_table_t *keybindings,
|
||||
const wm_pointer_binding_table_t *pointer_bindings,
|
||||
const wm_event_t *event,
|
||||
wm_command_buffer_t *out);
|
||||
bool wm_policy_route_event(
|
||||
const wm_state_t *state,
|
||||
const wm_policy_config_t *policy,
|
||||
const wm_key_binding_table_t *keybindings,
|
||||
const wm_pointer_binding_table_t *pointer_bindings,
|
||||
const wm_event_t *event,
|
||||
wm_command_buffer_t *out
|
||||
);
|
||||
|
||||
bool wm_policy_apply_command(wm_state_t *state,
|
||||
const wm_policy_config_t *policy,
|
||||
const wm_layout_registry_t *layouts,
|
||||
const wm_command_t *command, wm_plan_t *plan);
|
||||
bool wm_policy_apply_command(
|
||||
wm_state_t *state,
|
||||
const wm_policy_config_t *policy,
|
||||
const wm_layout_registry_t *layouts,
|
||||
const wm_command_t *command,
|
||||
wm_plan_t *plan
|
||||
);
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include "wm_binding.h"
|
||||
#include <stdint.h>
|
||||
|
||||
#include "wm_backend.h"
|
||||
#include "wm_binding.h"
|
||||
#include "wm_layout.h"
|
||||
#include "wm_plan.h"
|
||||
#include "wm_policy_config.h"
|
||||
#include "wm_policy.h"
|
||||
#include "wm_policy_config.h"
|
||||
#include "wm_service.h"
|
||||
#include "wm_state.h"
|
||||
#include <stdint.h>
|
||||
|
||||
typedef enum wm_interaction_mode_t {
|
||||
WM_INTERACTION_NONE,
|
||||
@@ -63,7 +64,8 @@ typedef struct wm_runtime_bootstrap_t {
|
||||
|
||||
/*
|
||||
* 不可变键盘绑定表。
|
||||
* 当前草案把它视为 bootstrap 提供的只读视图;items 的生命周期必须覆盖 runtime。
|
||||
* 当前草案把它视为 bootstrap 提供的只读视图;items 的生命周期必须覆盖
|
||||
* runtime。
|
||||
*/
|
||||
wm_key_binding_table_t keybindings;
|
||||
|
||||
@@ -115,8 +117,11 @@ typedef struct wm_runtime_t {
|
||||
wm_service_registry_t services;
|
||||
} wm_runtime_t;
|
||||
|
||||
bool wm_runtime_init(wm_runtime_t *runtime, wm_backend_t backend,
|
||||
const wm_runtime_bootstrap_t *bootstrap);
|
||||
bool wm_runtime_init(
|
||||
wm_runtime_t *runtime,
|
||||
wm_backend_t backend,
|
||||
const wm_runtime_bootstrap_t *bootstrap
|
||||
);
|
||||
bool wm_runtime_register_service(wm_runtime_t *runtime, wm_service_t service);
|
||||
|
||||
/*
|
||||
|
||||
@@ -30,8 +30,11 @@ typedef struct wm_service_t wm_service_t;
|
||||
|
||||
typedef struct wm_service_api_t {
|
||||
bool (*init)(wm_service_t *service);
|
||||
void (*handle_event)(wm_service_t *service, const wm_service_event_t *event,
|
||||
const wm_state_t *state);
|
||||
void (*handle_event)(
|
||||
wm_service_t *service,
|
||||
const wm_service_event_t *event,
|
||||
const wm_state_t *state
|
||||
);
|
||||
void (*shutdown)(wm_service_t *service);
|
||||
} wm_service_api_t;
|
||||
|
||||
@@ -49,8 +52,12 @@ typedef struct wm_service_registry_t {
|
||||
void wm_service_registry_init(wm_service_registry_t *registry);
|
||||
void wm_service_registry_shutdown(wm_service_registry_t *registry);
|
||||
|
||||
bool wm_service_registry_register(wm_service_registry_t *registry,
|
||||
wm_service_t service);
|
||||
void wm_service_registry_emit(wm_service_registry_t *registry,
|
||||
const wm_service_event_t *event,
|
||||
const wm_state_t *state);
|
||||
bool wm_service_registry_register(
|
||||
wm_service_registry_t *registry,
|
||||
wm_service_t service
|
||||
);
|
||||
void wm_service_registry_emit(
|
||||
wm_service_registry_t *registry,
|
||||
const wm_service_event_t *event,
|
||||
const wm_state_t *state
|
||||
);
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "wm_types.h"
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "wm_types.h"
|
||||
|
||||
// ========== 核心实体定义 ==========
|
||||
|
||||
typedef struct wm_window_t {
|
||||
@@ -19,8 +20,8 @@ typedef struct wm_window_t {
|
||||
bool fixed_size;
|
||||
|
||||
// 几何信息(均为包含边框后的外框矩形)
|
||||
wm_rect_t float_rect; // floating 模式下记忆的外框矩形
|
||||
wm_rect_t frame_rect; // 当前最终外框矩形(由 layout 或 float_rect 解析)
|
||||
wm_rect_t float_rect; // floating 模式下记忆的外框矩形
|
||||
wm_rect_t frame_rect; // 当前最终外框矩形(由 layout 或 float_rect 解析)
|
||||
|
||||
// 元数据(核心算法不依赖,仅用于规则匹配和服务层展示)
|
||||
char *title;
|
||||
@@ -34,8 +35,8 @@ typedef struct wm_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_output_id_t output_id; // 固定归属某个输出
|
||||
wm_layout_id_t layout_id; // 当前活动布局(可用布局列表中的一个)
|
||||
wm_window_id_t focused_window_id;
|
||||
|
||||
// 可用布局列表(启动时根据配置分配,之后固定不变)
|
||||
@@ -48,8 +49,8 @@ typedef struct wm_workspace_t {
|
||||
|
||||
typedef struct wm_output_t {
|
||||
wm_output_id_t id;
|
||||
wm_rect_t geometry; // 输出完整几何(bootstrap 后固定)
|
||||
wm_rect_t workarea; // 可用区域(排除面板等,bootstrap 后固定)
|
||||
wm_rect_t geometry; // 输出完整几何(bootstrap 后固定)
|
||||
wm_rect_t workarea; // 可用区域(排除面板等,bootstrap 后固定)
|
||||
wm_workspace_id_t current_workspace_id;
|
||||
} wm_output_t;
|
||||
|
||||
@@ -80,9 +81,11 @@ typedef struct wm_state_t {
|
||||
|
||||
// 初始化/清理
|
||||
// workspace/output 集合大小在 init 时一次性确定,之后不再变化。
|
||||
void wm_state_init(wm_state_t *state,
|
||||
size_t workspace_count,
|
||||
size_t output_count);
|
||||
void wm_state_init(
|
||||
wm_state_t *state,
|
||||
size_t workspace_count,
|
||||
size_t output_count
|
||||
);
|
||||
void wm_state_shutdown(wm_state_t *state);
|
||||
|
||||
// ========== Workspace 访问 ==========
|
||||
@@ -91,14 +94,18 @@ wm_workspace_t *wm_state_workspace(wm_state_t *state, wm_workspace_id_t id);
|
||||
wm_workspace_t *wm_state_workspace_at(wm_state_t *state, size_t index);
|
||||
size_t wm_state_workspace_count(const wm_state_t *state);
|
||||
bool wm_state_workspace_valid(wm_state_t *state, wm_workspace_id_t id);
|
||||
void wm_state_workspace_set_focused_window(wm_state_t *state,
|
||||
wm_workspace_id_t workspace_id,
|
||||
wm_window_id_t window_id);
|
||||
void wm_state_workspace_set_focused_window(
|
||||
wm_state_t *state,
|
||||
wm_workspace_id_t workspace_id,
|
||||
wm_window_id_t window_id
|
||||
);
|
||||
|
||||
// 查询某个 output 的所有 workspace(只读视图)
|
||||
size_t wm_state_workspace_get_by_output(const wm_state_t *state,
|
||||
wm_output_id_t output_id,
|
||||
wm_workspace_t **out_workspaces);
|
||||
size_t wm_state_workspace_get_by_output(
|
||||
const wm_state_t *state,
|
||||
wm_output_id_t output_id,
|
||||
wm_workspace_t **out_workspaces
|
||||
);
|
||||
|
||||
// ========== Workspace 布局操作 ==========
|
||||
|
||||
@@ -106,16 +113,18 @@ size_t wm_state_workspace_get_by_output(const wm_state_t *state,
|
||||
* 设置 workspace 的可用布局列表。
|
||||
* 仅允许在 bootstrap / 初始化阶段调用;运行时不应修改。
|
||||
*/
|
||||
void wm_workspace_set_layouts(wm_workspace_t *workspace,
|
||||
const wm_layout_id_t *layouts,
|
||||
size_t count);
|
||||
void wm_workspace_set_layouts(
|
||||
wm_workspace_t *workspace,
|
||||
const wm_layout_id_t *layouts,
|
||||
size_t count
|
||||
);
|
||||
|
||||
/*
|
||||
* 获取 workspace 的可用布局列表。
|
||||
* 该列表在 bootstrap 完成后保持不变。
|
||||
*/
|
||||
const wm_layout_id_t *wm_workspace_get_layouts(const wm_workspace_t *workspace,
|
||||
size_t *out_count);
|
||||
const wm_layout_id_t *
|
||||
wm_workspace_get_layouts(const wm_workspace_t *workspace, size_t *out_count);
|
||||
|
||||
/*
|
||||
* 切换到下一个布局(循环)
|
||||
@@ -130,7 +139,10 @@ bool wm_workspace_set_layout_by_index(wm_workspace_t *workspace, size_t index);
|
||||
/*
|
||||
* 切换到指定 ID 的布局(如果该布局在可用列表中)
|
||||
*/
|
||||
bool wm_workspace_set_layout_by_id(wm_workspace_t *workspace, wm_layout_id_t id);
|
||||
bool wm_workspace_set_layout_by_id(
|
||||
wm_workspace_t *workspace,
|
||||
wm_layout_id_t id
|
||||
);
|
||||
|
||||
// ========== Output 访问 ==========
|
||||
|
||||
@@ -143,9 +155,11 @@ bool wm_state_output_valid(wm_state_t *state, wm_output_id_t id);
|
||||
* 这不会修改 output 集合本身,也不会改变 workspace->output_id 绑定。
|
||||
* 调用方必须保证目标 workspace 固定归属于该 output。
|
||||
*/
|
||||
void wm_state_output_set_current_workspace(wm_state_t *state,
|
||||
wm_output_id_t output_id,
|
||||
wm_workspace_id_t workspace_id);
|
||||
void wm_state_output_set_current_workspace(
|
||||
wm_state_t *state,
|
||||
wm_output_id_t output_id,
|
||||
wm_workspace_id_t workspace_id
|
||||
);
|
||||
|
||||
// ========== Window 操作 ==========
|
||||
|
||||
@@ -154,43 +168,81 @@ wm_window_t *wm_state_window_get(wm_state_t *state, wm_window_id_t id);
|
||||
wm_window_t *wm_state_window_at(wm_state_t *state, size_t index);
|
||||
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 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,
|
||||
bool floating);
|
||||
void wm_state_window_set_sticky(wm_state_t *state, wm_window_id_t window_id,
|
||||
bool sticky);
|
||||
void wm_state_window_set_urgent(wm_state_t *state, wm_window_id_t window_id,
|
||||
bool urgent);
|
||||
void wm_state_window_set_fixed_size(wm_state_t *state,
|
||||
wm_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,
|
||||
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,
|
||||
const char *title);
|
||||
bool wm_state_window_set_app_id(wm_state_t *state, wm_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,
|
||||
const char *class_name);
|
||||
bool wm_state_window_set_instance(wm_state_t *state, wm_window_id_t window_id,
|
||||
const char *instance_name);
|
||||
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,
|
||||
bool floating
|
||||
);
|
||||
void wm_state_window_set_sticky(
|
||||
wm_state_t *state,
|
||||
wm_window_id_t window_id,
|
||||
bool sticky
|
||||
);
|
||||
void wm_state_window_set_urgent(
|
||||
wm_state_t *state,
|
||||
wm_window_id_t window_id,
|
||||
bool urgent
|
||||
);
|
||||
void wm_state_window_set_fixed_size(
|
||||
wm_state_t *state,
|
||||
wm_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,
|
||||
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,
|
||||
const char *title
|
||||
);
|
||||
bool wm_state_window_set_app_id(
|
||||
wm_state_t *state,
|
||||
wm_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,
|
||||
const char *class_name
|
||||
);
|
||||
bool wm_state_window_set_instance(
|
||||
wm_state_t *state,
|
||||
wm_window_id_t window_id,
|
||||
const char *instance_name
|
||||
);
|
||||
|
||||
// ========== 查询辅助函数 ==========
|
||||
|
||||
/*
|
||||
* 判断工作区是否可见(某个 output 正在显示它)
|
||||
*/
|
||||
bool wm_state_workspace_is_visible(const wm_state_t *state,
|
||||
wm_workspace_id_t workspace_id);
|
||||
bool wm_state_workspace_is_visible(
|
||||
const wm_state_t *state,
|
||||
wm_workspace_id_t workspace_id
|
||||
);
|
||||
|
||||
/*
|
||||
* 判断窗口是否可见
|
||||
@@ -199,12 +251,16 @@ bool wm_state_workspace_is_visible(const wm_state_t *state,
|
||||
* 2. 否则,窗口的 workspace 固定归属某个 output
|
||||
* 3. 且该 output 当前正显示这个 workspace
|
||||
*/
|
||||
bool wm_state_window_should_be_visible(const wm_state_t *state,
|
||||
const wm_window_t *window);
|
||||
bool wm_state_window_should_be_visible(
|
||||
const wm_state_t *state,
|
||||
const wm_window_t *window
|
||||
);
|
||||
|
||||
/*
|
||||
* 判断窗口是否在特定 output 上可见
|
||||
*/
|
||||
bool wm_state_window_should_be_visible_on_output(const wm_state_t *state,
|
||||
const wm_window_t *window,
|
||||
const wm_output_t *output);
|
||||
bool wm_state_window_should_be_visible_on_output(
|
||||
const wm_state_t *state,
|
||||
const wm_window_t *window,
|
||||
const wm_output_t *output
|
||||
);
|
||||
|
||||
@@ -30,11 +30,11 @@ typedef uint32_t wm_modifier_mask_t;
|
||||
typedef uint32_t wm_rgba32_t;
|
||||
|
||||
// 无效 ID 标记
|
||||
#define WM_WINDOW_ID_INVALID ((wm_window_id_t)0)
|
||||
#define WM_WORKSPACE_ID_INVALID ((wm_workspace_id_t)-1)
|
||||
#define WM_OUTPUT_ID_INVALID ((wm_output_id_t)-1)
|
||||
#define WM_LAYOUT_ID_INVALID ((wm_layout_id_t)-1)
|
||||
#define WM_KEYSYM_INVALID ((wm_keysym_t)0)
|
||||
#define WM_WINDOW_ID_INVALID ((wm_window_id_t)0)
|
||||
#define WM_WORKSPACE_ID_INVALID ((wm_workspace_id_t) - 1)
|
||||
#define WM_OUTPUT_ID_INVALID ((wm_output_id_t) - 1)
|
||||
#define WM_LAYOUT_ID_INVALID ((wm_layout_id_t) - 1)
|
||||
#define WM_KEYSYM_INVALID ((wm_keysym_t)0)
|
||||
|
||||
/*
|
||||
* 归一化后的修饰键掩码:
|
||||
@@ -42,10 +42,10 @@ typedef uint32_t wm_rgba32_t;
|
||||
* - CapsLock / NumLock 这类锁定位不应进入该掩码
|
||||
*/
|
||||
typedef enum wm_modifier_bit_t {
|
||||
WM_MOD_NONE = 0,
|
||||
WM_MOD_NONE = 0,
|
||||
WM_MOD_SHIFT = 1u << 0,
|
||||
WM_MOD_CTRL = 1u << 1,
|
||||
WM_MOD_ALT = 1u << 2,
|
||||
WM_MOD_CTRL = 1u << 1,
|
||||
WM_MOD_ALT = 1u << 2,
|
||||
WM_MOD_SUPER = 1u << 3,
|
||||
} wm_modifier_bit_t;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user