feat(core/event): 添加 event 资源清理和重置接口

This commit is contained in:
2026-04-13 03:46:21 +08:00
parent 637f658318
commit 0c24fb2a32
6 changed files with 57 additions and 4 deletions

View File

@@ -65,7 +65,7 @@ static bool handle_map_request(backend_t *backend, event_t *event,
const xcb_map_request_event_t *xcb_event) {
xcb_window_t window = xcb_event->window;
p_clear(event, 1);
event_reset(event);
event->type = ZDWM_EVENT_WINDOW_MAP_REQUEST;
window_map_request_event_t *ev = &event->as.window_map_request;
@@ -125,7 +125,7 @@ static bool handle_map_request(backend_t *backend, event_t *event,
static bool handle_unmap_notify(backend_t *backend, event_t *event,
const xcb_unmap_notify_event_t *xcb_event) {
p_clear(event, 1);
event_reset(event);
event->type = ZDWM_EVENT_WINDOW_REMOVE;
/* TODO: */
return true;
@@ -133,7 +133,7 @@ static bool handle_unmap_notify(backend_t *backend, event_t *event,
static bool handle_destroy_notify(backend_t *backend, event_t *event,
const xcb_destroy_notify_event_t *xcb_event) {
p_clear(event, 1);
event_reset(event);
event->type = ZDWM_EVENT_WINDOW_REMOVE;
/* TODO: */
return true;
@@ -142,7 +142,7 @@ static bool handle_destroy_notify(backend_t *backend, event_t *event,
static bool handle_configure_request(
backend_t *backend, event_t *event,
const xcb_configure_request_event_t *xcb_event) {
p_clear(event, 1);
event_reset(event);
event->type = ZDWM_EVENT_CONFIGURE_REQUEST;
/* TODO: */
return true;
@@ -179,5 +179,6 @@ bool backend_next_event(backend_t *backend, event_t *event) {
p_delete(&raw_event);
if (handled) return true;
event_reset(event);
}
}

45
src/core/event.c Normal file
View File

@@ -0,0 +1,45 @@
#include "core/event.h"
#include "base/memory.h"
static void window_layer_props_cleanup(window_layer_props_t *props) {
if (!props) return;
p_delete(&props->types);
props->type_count = 0;
p_delete(&props->states);
props->state_count = 0;
}
static void window_metadata_cleanup(window_metadata_t *metadata) {
if (!metadata) return;
p_delete(&metadata->title);
p_delete(&metadata->app_id);
p_delete(&metadata->role);
p_delete(&metadata->class_name);
p_delete(&metadata->instance_name);
}
void event_cleanup(event_t *event) {
if (!event) return;
switch (event->type) {
case ZDWM_EVENT_WINDOW_MAP_REQUEST:
window_layer_props_cleanup(&event->as.window_map_request.props);
window_metadata_cleanup(&event->as.window_map_request.metadata);
break;
case ZDWM_EVENT_WINDOW_METADATA_CHANGED:
window_metadata_cleanup(&event->as.window_metadata_change.metadata);
break;
default:
break;
}
}
void event_reset(event_t *event) {
if (!event) return;
event_cleanup(event);
p_clear(event, 1);
}

View File

@@ -178,3 +178,6 @@ typedef struct event_t {
configure_request_event_t configure_request;
} as;
} event_t;
void event_cleanup(event_t *event);
void event_reset(event_t *event);

View File

@@ -97,5 +97,7 @@ void runtime_run(runtime_t *runtime) {
if (!backend_next_event(runtime->backend, &event)) {
break;
}
event_cleanup(&event);
}
}