feat: 添加核心状态变更通知系统

This commit is contained in:
2026-05-17 03:20:38 +08:00
parent 74be362b1f
commit 74319e97f1
10 changed files with 392 additions and 1 deletions

View File

@@ -6,6 +6,7 @@
#include <stdint.h>
#include <zdwm/action.h>
#include <zdwm/layout.h>
#include <zdwm/listeners.h>
#include <zdwm/rules.h>
#include <zdwm/types.h>
@@ -155,6 +156,57 @@ typedef struct zdwm_api_t {
const char *normal,
const char *focused
);
/** @name Listener 注册
* @{ */
void (*subscribe_current_output)(
zdwm_config_builder_t *builder,
zdwm_current_output_id_listener *fn,
void *user_data
);
void (*subscribe_initial_workspace_list)(
zdwm_config_builder_t *builder,
zdwm_initial_workspace_list *fn,
void *user_data
);
void (*subscribe_workspace_active)(
zdwm_config_builder_t *builder,
zdwm_workspace_active_updated *fn,
void *user_data
);
void (*subscribe_layout)(
zdwm_config_builder_t *builder,
zdwm_layout_notify *fn,
void *user_data
);
void (*subscribe_binding_mode)(
zdwm_config_builder_t *builder,
zdwm_binding_mode_notify *fn,
void *user_data
);
void (*subscribe_initial_window_list)(
zdwm_config_builder_t *builder,
zdwm_initial_window_list *fn,
void *user_data
);
void (*subscribe_window_added)(
zdwm_config_builder_t *builder,
zdwm_window_added *fn,
void *user_data
);
void (*subscribe_window_updated)(
zdwm_config_builder_t *builder,
zdwm_window_updated *fn,
void *user_data
);
void (*subscribe_window_removed)(
zdwm_config_builder_t *builder,
zdwm_window_removed *fn,
void *user_data
);
/** @} */
} zdwm_api_t;
/**

63
include/zdwm/listeners.h Normal file
View File

@@ -0,0 +1,63 @@
#ifndef ZDWM_LISTENERS_H
#define ZDWM_LISTENERS_H
#include <stddef.h>
#include <zdwm/types.h>
typedef void
zdwm_current_output_id_listener(zdwm_output_id_t output_id, void *user_data);
typedef struct zdwm_workspace_t {
zdwm_output_id_t output_id;
zdwm_workspace_id_t id;
const char *name; /* 不持有内存 */
} zdwm_workspace_t;
typedef void zdwm_initial_workspace_list(
const zdwm_workspace_t *list,
size_t count,
void *user_data
);
typedef void zdwm_workspace_active_updated(
zdwm_output_id_t output_id,
zdwm_workspace_id_t workspace_id,
void *user_data
);
typedef struct zdwm_layout_notify_t {
zdwm_workspace_id_t workspace;
zdwm_layout_id_t id;
const char *symbol; /* 不持有内存 */
} zdwm_layout_notify_t;
typedef void zdwm_layout_notify(zdwm_layout_notify_t layout, void *user_data);
typedef struct zdwm_binding_mode_notify_t {
bool is_default_mode;
bool is_current_mode;
zdwm_binding_mode_id_t id;
const char *name; /* 不持有内存 */
} zdwm_binding_mode_notify_t;
typedef void zdwm_binding_mode_notify(
zdwm_binding_mode_notify_t binding_mode,
void *user_data
);
typedef struct zdwm_window_t {
zdwm_workspace_id_t workspace;
zdwm_window_id_t id;
const char *title; /* 不持有内存 */
bool focused;
bool urgent;
bool skip_taskbar;
} zdwm_window_t;
typedef void zdwm_initial_window_list(
const zdwm_window_t *list,
size_t count,
void *user_data
);
typedef void zdwm_window_added(const zdwm_window_t *window, void *user_data);
typedef void zdwm_window_updated(const zdwm_window_t *window, void *user_data);
typedef void zdwm_window_removed(zdwm_window_id_t window_id, void *user_data);
typedef struct zdwm_listeners_t zdwm_listeners_t;
#endif /* ZDWM_LISTENERS_H */

View File

@@ -7,6 +7,7 @@
extern "C" {
#endif
typedef uint32_t zdwm_output_id_t;
typedef uint32_t zdwm_layout_id_t;
typedef uint32_t zdwm_window_id_t;
typedef uint32_t zdwm_workspace_id_t;