core: 调整 window 状态修改接口实现方式
This commit is contained in:
127
src/core/state.c
127
src/core/state.c
@@ -267,6 +267,57 @@ bool state_output_valid(const state_t *state, output_id_t id) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void window_set_geometry_mode(
|
||||||
|
window_t *window, window_geometry_mode_t geometry_mode) {
|
||||||
|
window->geometry_mode = geometry_mode;
|
||||||
|
}
|
||||||
|
static inline void window_set_floating(window_t *window, bool floating) {
|
||||||
|
window->floating = floating;
|
||||||
|
if (floating) window->float_rect = window->frame_rect;
|
||||||
|
}
|
||||||
|
static inline void window_set_sticky(window_t *window, bool sticky) {
|
||||||
|
window->sticky = sticky;
|
||||||
|
if (sticky) window_set_floating(window, true);
|
||||||
|
}
|
||||||
|
static inline void window_set_urgent(window_t *window, bool urgent) {
|
||||||
|
window->urgent = urgent;
|
||||||
|
}
|
||||||
|
static inline void window_set_fixed_size(window_t *window, bool fixed_size) {
|
||||||
|
window->fixed_size = fixed_size;
|
||||||
|
if (fixed_size) window_set_floating(window, true);
|
||||||
|
}
|
||||||
|
static inline void window_set_float_rect(window_t *window, rect_t rect) {
|
||||||
|
window->float_rect = rect;
|
||||||
|
}
|
||||||
|
static inline void window_set_frame_rect(window_t *window, rect_t rect) {
|
||||||
|
window->frame_rect = rect;
|
||||||
|
}
|
||||||
|
static inline void window_set_title(window_t *window, const char *title) {
|
||||||
|
p_delete(&window->title);
|
||||||
|
window->title = p_strdup_nullable(title);
|
||||||
|
}
|
||||||
|
static inline void window_set_app_id(window_t *window, const char *app_id) {
|
||||||
|
p_delete(&window->app_id);
|
||||||
|
window->app_id = p_strdup_nullable(app_id);
|
||||||
|
}
|
||||||
|
static inline void window_set_role(window_t *window, const char *role) {
|
||||||
|
p_delete(&window->role);
|
||||||
|
window->role = p_strdup_nullable(role);
|
||||||
|
}
|
||||||
|
static inline void window_set_class(window_t *window, const char *class_name) {
|
||||||
|
p_delete(&window->class_name);
|
||||||
|
window->class_name = p_strdup_nullable(class_name);
|
||||||
|
}
|
||||||
|
static inline void window_set_instance(window_t *window,
|
||||||
|
const char *instance_name) {
|
||||||
|
p_delete(&window->instance_name);
|
||||||
|
window->instance_name = p_strdup_nullable(instance_name);
|
||||||
|
}
|
||||||
|
static inline void window_set_skip_taskbar(window_t *window,
|
||||||
|
bool skip_taskbar) {
|
||||||
|
window->skip_taskbar = skip_taskbar;
|
||||||
|
}
|
||||||
|
|
||||||
const window_t *state_window_add(state_t *state, const window_info_t *info) {
|
const window_t *state_window_add(state_t *state, const window_info_t *info) {
|
||||||
window_id_t id = info->id;
|
window_id_t id = info->id;
|
||||||
window_t *window = (window_t *)state_window_get(state, id);
|
window_t *window = (window_t *)state_window_get(state, id);
|
||||||
@@ -279,19 +330,21 @@ const window_t *state_window_add(state_t *state, const window_info_t *info) {
|
|||||||
|
|
||||||
p_clear(window, 1);
|
p_clear(window, 1);
|
||||||
window->id = id;
|
window->id = id;
|
||||||
|
window->transient_for = info->transient_for;
|
||||||
window->workspace_id = ZDWM_WORKSPACE_ID_INVALID;
|
window->workspace_id = ZDWM_WORKSPACE_ID_INVALID;
|
||||||
|
window->layer = info->layer_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
state_window_set_geometry_mode(state, id, info->geometry_mode);
|
window_set_geometry_mode(window, info->geometry_mode);
|
||||||
state_window_set_urgent(state, id, info->urgent);
|
window_set_urgent(window, info->urgent);
|
||||||
state_window_set_fixed_size(state, id, info->fixed_size);
|
window_set_fixed_size(window, info->fixed_size);
|
||||||
state_window_set_frame_rect(state, id, info->frame_rect);
|
window_set_frame_rect(window, info->frame_rect);
|
||||||
state_window_set_title(state, id, info->title);
|
window_set_title(window, info->title);
|
||||||
state_window_set_app_id(state, id, info->app_id);
|
window_set_app_id(window, info->app_id);
|
||||||
state_window_set_role(state, id, info->role);
|
window_set_role(window, info->role);
|
||||||
state_window_set_class(state, id, info->class_name);
|
window_set_class(window, info->class_name);
|
||||||
state_window_set_instance(state, id, info->instance_name);
|
window_set_instance(window, info->instance_name);
|
||||||
state_window_set_skip_taskbar(state, id, info->skip_taskbar);
|
window_set_skip_taskbar(window, info->skip_taskbar);
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
@@ -373,67 +426,49 @@ void state_window_set_workspace(state_t *state, window_id_t window_id,
|
|||||||
void state_window_set_geometry_mode(state_t *state, window_id_t window_id,
|
void state_window_set_geometry_mode(state_t *state, window_id_t window_id,
|
||||||
window_geometry_mode_t geometry_mode) {
|
window_geometry_mode_t geometry_mode) {
|
||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return;
|
if (window) window_set_geometry_mode(window, geometry_mode);
|
||||||
|
|
||||||
window->geometry_mode = geometry_mode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void state_window_set_floating(state_t *state, window_id_t window_id,
|
void state_window_set_floating(state_t *state, window_id_t window_id,
|
||||||
bool floating) {
|
bool floating) {
|
||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return;
|
if (window) window_set_floating(window, floating);
|
||||||
|
|
||||||
window->floating = floating;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void state_window_set_sticky(state_t *state, window_id_t window_id,
|
void state_window_set_sticky(state_t *state, window_id_t window_id,
|
||||||
bool sticky) {
|
bool sticky) {
|
||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return;
|
if (window) window_set_sticky(window, sticky);
|
||||||
|
|
||||||
window->sticky = sticky;
|
|
||||||
if (window->sticky) state_window_set_floating(state, window_id, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void state_window_set_urgent(state_t *state, window_id_t window_id,
|
void state_window_set_urgent(state_t *state, window_id_t window_id,
|
||||||
bool urgent) {
|
bool urgent) {
|
||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return;
|
if (window) window_set_urgent(window, urgent);
|
||||||
|
|
||||||
window->urgent = urgent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void state_window_set_fixed_size(state_t *state, window_id_t window_id,
|
void state_window_set_fixed_size(state_t *state, window_id_t window_id,
|
||||||
bool fixed_size) {
|
bool fixed_size) {
|
||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return;
|
if (window) window_set_fixed_size(window, fixed_size);
|
||||||
|
|
||||||
window->fixed_size = fixed_size;
|
|
||||||
if (fixed_size) state_window_set_floating(state, window_id, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void state_window_set_skip_taskbar(state_t *state, window_id_t window_id,
|
void state_window_set_skip_taskbar(state_t *state, window_id_t window_id,
|
||||||
bool skip_taskbar) {
|
bool skip_taskbar) {
|
||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return;
|
if (window) window_set_skip_taskbar(window, skip_taskbar);
|
||||||
|
|
||||||
window->skip_taskbar = skip_taskbar;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void state_window_set_float_rect(state_t *state, window_id_t window_id,
|
void state_window_set_float_rect(state_t *state, window_id_t window_id,
|
||||||
rect_t float_rect) {
|
rect_t float_rect) {
|
||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return;
|
if (window) window_set_float_rect(window, float_rect);
|
||||||
|
|
||||||
window->float_rect = float_rect;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void state_window_set_frame_rect(state_t *state, window_id_t window_id,
|
void state_window_set_frame_rect(state_t *state, window_id_t window_id,
|
||||||
rect_t frame_rect) {
|
rect_t frame_rect) {
|
||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return;
|
if (window) window_set_frame_rect(window, frame_rect);
|
||||||
|
|
||||||
window->frame_rect = frame_rect;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool state_window_take_metadata(state_t *state, window_id_t window_id,
|
bool state_window_take_metadata(state_t *state, window_id_t window_id,
|
||||||
@@ -466,9 +501,7 @@ bool state_window_set_title(state_t *state, window_id_t window_id,
|
|||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return false;
|
if (!window) return false;
|
||||||
|
|
||||||
p_delete(&window->title);
|
window_set_title(window, title);
|
||||||
window->title = p_strdup_nullable(title);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -477,9 +510,7 @@ bool state_window_set_app_id(state_t *state, window_id_t window_id,
|
|||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return false;
|
if (!window) return false;
|
||||||
|
|
||||||
p_delete(&window->app_id);
|
window_set_app_id(window, app_id);
|
||||||
window->app_id = p_strdup_nullable(app_id);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -488,9 +519,7 @@ bool state_window_set_role(state_t *state, window_id_t window_id,
|
|||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return false;
|
if (!window) return false;
|
||||||
|
|
||||||
p_delete(&window->role);
|
window_set_role(window, role);
|
||||||
window->role = p_strdup_nullable(role);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,9 +528,7 @@ bool state_window_set_class(state_t *state, window_id_t window_id,
|
|||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return false;
|
if (!window) return false;
|
||||||
|
|
||||||
p_delete(&window->class_name);
|
window_set_class(window, class_name);
|
||||||
window->class_name = p_strdup_nullable(class_name);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -510,9 +537,7 @@ bool state_window_set_instance(state_t *state, window_id_t window_id,
|
|||||||
window_t *window = (window_t *)state_window_get(state, window_id);
|
window_t *window = (window_t *)state_window_get(state, window_id);
|
||||||
if (!window) return false;
|
if (!window) return false;
|
||||||
|
|
||||||
p_delete(&window->instance_name);
|
window_set_instance(window, instance_name);
|
||||||
window->instance_name = p_strdup_nullable(instance_name);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#include "core/types.h"
|
|
||||||
|
|
||||||
/* Internal semantic window types mapped from backend-specific protocols. */
|
/* Internal semantic window types mapped from backend-specific protocols. */
|
||||||
typedef enum window_type_t {
|
typedef enum window_type_t {
|
||||||
ZDWM_WINDOW_TYPE_NORMAL = 0,
|
ZDWM_WINDOW_TYPE_NORMAL = 0,
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
typedef struct window_info_t {
|
typedef struct window_info_t {
|
||||||
window_id_t id;
|
window_id_t id;
|
||||||
|
window_id_t transient_for;
|
||||||
rect_t frame_rect;
|
rect_t frame_rect;
|
||||||
|
|
||||||
const char *title;
|
const char *title;
|
||||||
|
|||||||
Reference in New Issue
Block a user