core: 定义核心事件数据模型并更新其文档
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "wm_types.h"
|
||||
#include "wm_desc.h"
|
||||
|
||||
/*
|
||||
* wm_event_t 表示“runtime 真正关心的输入事实”:
|
||||
@@ -10,17 +10,19 @@
|
||||
* 的返回结果表达,而不是伪装成一个事件类型
|
||||
*/
|
||||
typedef enum wm_event_type_t {
|
||||
// 最小核心里的快捷键只由 key press 触发,不单独暴露 key release 事件
|
||||
WM_EVENT_KEY_PRESS,
|
||||
// 鼠标绑定只匹配 button press;button release 主要供交互态结束拖拽使用
|
||||
WM_EVENT_POINTER_BUTTON_PRESS,
|
||||
WM_EVENT_POINTER_BUTTON_RELEASE,
|
||||
WM_EVENT_POINTER_MOTION,
|
||||
WM_EVENT_WINDOW_MAP_REQUEST,
|
||||
WM_EVENT_WINDOW_UNMAP,
|
||||
WM_EVENT_WINDOW_DESTROY,
|
||||
WM_EVENT_WINDOW_REMOVE,
|
||||
WM_EVENT_WINDOW_METADATA_CHANGED,
|
||||
WM_EVENT_WINDOW_HINTS_CHANGED,
|
||||
WM_EVENT_WINDOW_ACTIVATE_REQUEST,
|
||||
WM_EVENT_WINDOW_STATE_REQUEST,
|
||||
WM_EVENT_CONFIGURE_REQUEST,
|
||||
WM_EVENT_TIMER_TICK,
|
||||
WM_EVENT_STATUS_TICK,
|
||||
} wm_event_type_t;
|
||||
|
||||
typedef struct wm_key_press_event_t {
|
||||
@@ -63,16 +65,27 @@ typedef struct wm_pointer_motion_event_t {
|
||||
} wm_pointer_motion_event_t;
|
||||
|
||||
typedef struct wm_window_map_request_event_t {
|
||||
wm_window_id_t window;
|
||||
wm_window_info_t info;
|
||||
// 仅用于 manage 路由判断,不进入持久 state
|
||||
wm_window_id_t transient_for;
|
||||
// 仅用于 manage 路由判断,不进入持久 state
|
||||
bool is_dialog;
|
||||
} wm_window_map_request_event_t;
|
||||
|
||||
typedef struct wm_window_unmap_event_t {
|
||||
wm_window_id_t window;
|
||||
} wm_window_unmap_event_t;
|
||||
/*
|
||||
* 归一化后的窗口移除事件。
|
||||
* backend 把 withdraw / destroy 这类平台差异折叠成单一 remove 事件,
|
||||
* core 只按 reason 区分“为何离开 managed 集合”。
|
||||
*/
|
||||
typedef enum wm_window_remove_reason_t {
|
||||
WM_WINDOW_REMOVE_WITHDRAWN,
|
||||
WM_WINDOW_REMOVE_DESTROY,
|
||||
} wm_window_remove_reason_t;
|
||||
|
||||
typedef struct wm_window_destroy_event_t {
|
||||
typedef struct wm_window_remove_event_t {
|
||||
wm_window_id_t window;
|
||||
} wm_window_destroy_event_t;
|
||||
wm_window_remove_reason_t reason;
|
||||
} wm_window_remove_event_t;
|
||||
|
||||
typedef enum wm_window_meta_changed_flags_t {
|
||||
WM_WINDOW_META_CHANGED_NONE = 0,
|
||||
@@ -97,19 +110,91 @@ typedef struct wm_window_metadata_changed_event_t {
|
||||
const char *instance_name;
|
||||
} 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_SKIP_TASKBAR = 1u << 2,
|
||||
} wm_window_hint_changed_flags_t;
|
||||
|
||||
/*
|
||||
* 客户端属性 / hint 变化的归一化结果。
|
||||
* 这类事件不是控制请求,不经过 command 路由;
|
||||
* runtime 直接把结果同步到 wm_window_t 中的 hint/capability 字段。
|
||||
*/
|
||||
typedef struct wm_window_hints_changed_event_t {
|
||||
wm_window_id_t window;
|
||||
uint32_t changed_fields;
|
||||
bool urgent;
|
||||
bool fixed_size;
|
||||
bool skip_taskbar;
|
||||
} wm_window_hints_changed_event_t;
|
||||
|
||||
/*
|
||||
* 归一化后的窗口激活请求来源。
|
||||
* 取值对齐 EWMH _NET_ACTIVE_WINDOW 的 source indication:
|
||||
* - 0: 旧客户端 / 未指明来源
|
||||
* - 1: 应用自身发起
|
||||
* - 2: pager / taskbar / window switcher 发起
|
||||
*/
|
||||
typedef enum wm_window_activation_source_t {
|
||||
WM_WINDOW_ACTIVATION_SOURCE_LEGACY = 0,
|
||||
WM_WINDOW_ACTIVATION_SOURCE_APPLICATION = 1,
|
||||
WM_WINDOW_ACTIVATION_SOURCE_PAGER = 2,
|
||||
} wm_window_activation_source_t;
|
||||
|
||||
typedef struct wm_window_activate_request_event_t {
|
||||
wm_window_id_t window;
|
||||
wm_window_activation_source_t source;
|
||||
} wm_window_activate_request_event_t;
|
||||
|
||||
/*
|
||||
* 归一化后的窗口模式切换请求。
|
||||
* backend 保留 add/remove/toggle 这类原始协议语义;
|
||||
* route_event() 再结合当前 wm_state_t 翻译成最终的 SET_* 命令。
|
||||
*/
|
||||
typedef enum wm_window_state_request_kind_t {
|
||||
WM_WINDOW_STATE_REQUEST_FULLSCREEN,
|
||||
WM_WINDOW_STATE_REQUEST_MAXIMIZED,
|
||||
WM_WINDOW_STATE_REQUEST_MINIMIZED,
|
||||
} wm_window_state_request_kind_t;
|
||||
|
||||
typedef enum wm_window_state_request_action_t {
|
||||
WM_WINDOW_STATE_REQUEST_ACTION_ADD,
|
||||
WM_WINDOW_STATE_REQUEST_ACTION_REMOVE,
|
||||
WM_WINDOW_STATE_REQUEST_ACTION_TOGGLE,
|
||||
} wm_window_state_request_action_t;
|
||||
|
||||
typedef struct wm_window_state_request_event_t {
|
||||
wm_window_id_t window;
|
||||
wm_window_state_request_kind_t kind;
|
||||
wm_window_state_request_action_t action;
|
||||
} 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_HEIGHT = 1u << 3,
|
||||
} wm_configure_request_field_t;
|
||||
|
||||
/*
|
||||
* 归一化后的窗口配置请求。
|
||||
* 这类事件只表达稀疏几何请求,不承载 fullscreen/maximize/minimize
|
||||
* 之类窗口模式切换;后者应进入独立的 state request event。
|
||||
*
|
||||
* x / y / width / height 中只有 changed_fields 指示的成员才有意义。
|
||||
*/
|
||||
typedef struct wm_configure_request_event_t {
|
||||
wm_window_id_t window;
|
||||
wm_rect_t requested_rect;
|
||||
uint32_t changed_fields;
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
int32_t width;
|
||||
int32_t height;
|
||||
} wm_configure_request_event_t;
|
||||
|
||||
typedef struct wm_timer_tick_event_t {
|
||||
wm_time_ms_t now_ms;
|
||||
} wm_timer_tick_event_t;
|
||||
|
||||
typedef struct wm_status_tick_event_t {
|
||||
wm_time_ms_t now_ms;
|
||||
} wm_status_tick_event_t;
|
||||
|
||||
typedef struct wm_event_t {
|
||||
wm_event_type_t type;
|
||||
// backend 归一化后的事件时间值(毫秒),不是 wall-clock 时间戳
|
||||
@@ -120,11 +205,11 @@ typedef struct wm_event_t {
|
||||
wm_pointer_button_event_t pointer_button_release;
|
||||
wm_pointer_motion_event_t pointer_motion;
|
||||
wm_window_map_request_event_t window_map_request;
|
||||
wm_window_unmap_event_t window_unmap;
|
||||
wm_window_destroy_event_t window_destroy;
|
||||
wm_window_remove_event_t window_remove;
|
||||
wm_window_metadata_changed_event_t window_metadata_changed;
|
||||
wm_window_hints_changed_event_t window_hints_changed;
|
||||
wm_window_activate_request_event_t window_activate_request;
|
||||
wm_window_state_request_event_t window_state_request;
|
||||
wm_configure_request_event_t configure_request;
|
||||
wm_timer_tick_event_t timer_tick;
|
||||
wm_status_tick_event_t status_tick;
|
||||
} data;
|
||||
} wm_event_t;
|
||||
|
||||
Reference in New Issue
Block a user