118 lines
3.0 KiB
C
118 lines
3.0 KiB
C
#pragma once
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "base/color.h"
|
|
#include "core/types.h"
|
|
|
|
typedef enum effect_type_t {
|
|
ZDWM_EFFECT_MAP_WINDOW = 1,
|
|
ZDWM_EFFECT_UNMAP_WINDOW,
|
|
ZDWM_EFFECT_FOCUS_WINDOW,
|
|
ZDWM_EFFECT_KILL_WINDOW,
|
|
ZDWM_EFFECT_WITHDRAW_WINDOW,
|
|
ZDWM_EFFECT_START_MOVE_WINDOW,
|
|
ZDWM_EFFECT_MINIMIZE_WINDOW,
|
|
ZDWM_EFFECT_MAXIMIZE_WINDOW,
|
|
ZDWM_EFFECT_FULLSCREEN_WINDOW,
|
|
ZDWM_EFFECT_CONFIGURE_WINDOW,
|
|
ZDWM_EFFECT_CHANGE_BORDER_COLOR,
|
|
ZDWM_EFFECT_CHANGE_WINDOW_LIST,
|
|
ZDWM_EFFECT_RESTACK_WINDOWS,
|
|
ZDWM_EFFECT_BIND_KEY,
|
|
ZDWM_EFFECT_GRAB_BUTTON,
|
|
ZDWM_EFFECT_UNGRAB_POINTER,
|
|
} effect_type_t;
|
|
|
|
typedef struct effect_move_window_t {
|
|
window_id_t window;
|
|
point_t left_top_point;
|
|
} effect_move_window_t;
|
|
|
|
typedef struct effect_resize_window_t {
|
|
window_id_t window;
|
|
int32_t width;
|
|
int32_t height;
|
|
} effect_resize_window_t;
|
|
|
|
typedef struct effect_change_border_color_t {
|
|
window_id_t window;
|
|
const color_t *color;
|
|
} effect_change_border_color_t;
|
|
|
|
typedef struct effect_window_list_t {
|
|
const window_id_t *windows;
|
|
size_t count;
|
|
} effect_window_list_t;
|
|
|
|
typedef struct effect_bind_key_t {
|
|
const key_bind_t *keys;
|
|
size_t count;
|
|
} effect_bind_key_t;
|
|
|
|
typedef struct effect_grab_button_t {
|
|
window_id_t window;
|
|
const grab_button_t *buttons;
|
|
size_t count;
|
|
} effect_grab_button_t;
|
|
|
|
typedef struct effect_bool_window_t {
|
|
window_id_t window;
|
|
bool value;
|
|
} effect_bool_window_t;
|
|
|
|
typedef struct effect_t {
|
|
effect_type_t type;
|
|
union {
|
|
only_window_data_t map;
|
|
only_window_data_t unmap;
|
|
only_window_data_t focus;
|
|
only_window_data_t kill;
|
|
only_window_data_t withdraw;
|
|
only_window_data_t move;
|
|
effect_bool_window_t minimize;
|
|
effect_bool_window_t maximize;
|
|
effect_bool_window_t fullscreen;
|
|
configure_data_t configure;
|
|
effect_change_border_color_t change_border_color;
|
|
effect_window_list_t change_window_list;
|
|
effect_window_list_t restack_windows;
|
|
effect_bind_key_t bind_key;
|
|
effect_grab_button_t grab_button;
|
|
} as;
|
|
} effect_t;
|
|
|
|
typedef struct plan_t {
|
|
effect_t *effects;
|
|
size_t count;
|
|
size_t capacity;
|
|
bool need_relayout;
|
|
bool quit;
|
|
bool will_restart;
|
|
} plan_t;
|
|
|
|
void plan_reset(plan_t *plan);
|
|
void plan_cleanup(plan_t *plan);
|
|
void plan_push_effect(plan_t *plan, const effect_t *effect);
|
|
|
|
void plan_push_map_effect(plan_t *plan, window_id_t window_id);
|
|
void plan_push_unmap_effect(plan_t *plan, window_id_t window_id);
|
|
void plan_push_focus_effect(plan_t *plan, window_id_t window_id);
|
|
void plan_push_kill_effect(plan_t *plan, window_id_t window_id);
|
|
void plan_push_withdraw_effect(plan_t *plan, window_id_t window_id);
|
|
void plan_push_move_effect(plan_t *plan, window_id_t window_id);
|
|
void plan_push_fullscreen_effect(
|
|
plan_t *plan,
|
|
window_id_t window_id,
|
|
bool value
|
|
);
|
|
void plan_push_maximize_effect(plan_t *plan, window_id_t window_id, bool value);
|
|
void plan_push_minimize_effect(plan_t *plan, window_id_t window_id, bool value);
|
|
void plan_push_change_border_color_effect(
|
|
plan_t *plan,
|
|
window_id_t window_id,
|
|
const color_t *color
|
|
);
|
|
void plan_push_ungrab_pointer(plan_t *plan);
|