fix(core/binding): 将 action_arg 改为值类型避免悬空指针问题
This commit is contained in:
@@ -111,7 +111,7 @@ typedef struct zdwm_api_t {
|
|||||||
zdwm_binding_mode_id_t bind_mode,
|
zdwm_binding_mode_id_t bind_mode,
|
||||||
const char *key_sequence,
|
const char *key_sequence,
|
||||||
zdwm_action_fn action_fn,
|
zdwm_action_fn action_fn,
|
||||||
zdwm_action_arg_t *action_arg
|
zdwm_action_arg_t action_arg
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ bool config_defaults_build(
|
|||||||
auto default_mode = api->add_mode(builder, "default");
|
auto default_mode = api->add_mode(builder, "default");
|
||||||
|
|
||||||
#define BIND(mode, key, fn, arg) \
|
#define BIND(mode, key, fn, arg) \
|
||||||
api->bind(builder, mode, key, fn, &(zdwm_action_arg_t)arg)
|
api->bind(builder, mode, key, fn, (zdwm_action_arg_t)arg)
|
||||||
|
|
||||||
BIND(default_mode, "Mod4+r", spawn, {.str = launcher});
|
BIND(default_mode, "Mod4+r", spawn, {.str = launcher});
|
||||||
|
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ static bool runtime_config_bind(
|
|||||||
zdwm_binding_mode_id_t mode,
|
zdwm_binding_mode_id_t mode,
|
||||||
const char *key,
|
const char *key,
|
||||||
zdwm_action_fn fn,
|
zdwm_action_fn fn,
|
||||||
zdwm_action_arg_t *arg
|
zdwm_action_arg_t arg
|
||||||
) {
|
) {
|
||||||
return binding_table_add_bind(builder->binding_table, mode, key, fn, arg);
|
return binding_table_add_bind(builder->binding_table, mode, key, fn, arg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ bool binding_table_add_bind(
|
|||||||
zdwm_binding_mode_id_t mode_id,
|
zdwm_binding_mode_id_t mode_id,
|
||||||
const char *key_sequence,
|
const char *key_sequence,
|
||||||
zdwm_action_fn fn,
|
zdwm_action_fn fn,
|
||||||
zdwm_action_arg_t *arg
|
zdwm_action_arg_t arg
|
||||||
) {
|
) {
|
||||||
binding_mode_t *mode = binding_table_get_mode(table, mode_id);
|
binding_mode_t *mode = binding_table_get_mode(table, mode_id);
|
||||||
if (!mode) return false;
|
if (!mode) return false;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ typedef struct key_binding_t {
|
|||||||
modifier_mask_t modifiers;
|
modifier_mask_t modifiers;
|
||||||
keysym_t keysym;
|
keysym_t keysym;
|
||||||
zdwm_action_fn *fn;
|
zdwm_action_fn *fn;
|
||||||
zdwm_action_arg_t *arg;
|
zdwm_action_arg_t arg;
|
||||||
} key_binding_t;
|
} key_binding_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -47,7 +47,7 @@ bool binding_table_add_bind(
|
|||||||
zdwm_binding_mode_id_t mode_id,
|
zdwm_binding_mode_id_t mode_id,
|
||||||
const char *key_sequence,
|
const char *key_sequence,
|
||||||
zdwm_action_fn fn,
|
zdwm_action_fn fn,
|
||||||
zdwm_action_arg_t *arg
|
zdwm_action_arg_t arg
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ static void route_key_press(
|
|||||||
for (size_t i = 0; i < count; ++i) {
|
for (size_t i = 0; i < count; ++i) {
|
||||||
auto binding = &bindings[i];
|
auto binding = &bindings[i];
|
||||||
if (binding->modifiers == e->modifiers && binding->keysym == e->keysym) {
|
if (binding->modifiers == e->modifiers && binding->keysym == e->keysym) {
|
||||||
binding->fn(action_ctx, binding->arg);
|
binding->fn(action_ctx, &binding->arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user