config: simplify keysym translation fields
Do not store `xkb_keymap` since it can be retrieved from `xkb_state`.
This commit is contained in:
parent
a09c144b8b
commit
f1609abe4c
|
@ -407,14 +407,6 @@ enum alignment {
|
||||||
ALIGN_RIGHT
|
ALIGN_RIGHT
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* The keysym to keycode translation.
|
|
||||||
*/
|
|
||||||
struct keysym_translation_data {
|
|
||||||
struct xkb_keymap *xkb_keymap;
|
|
||||||
struct xkb_state *xkb_state;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The configuration struct. The result of loading a config file.
|
* The configuration struct. The result of loading a config file.
|
||||||
*/
|
*/
|
||||||
|
@ -518,7 +510,7 @@ struct sway_config {
|
||||||
list_t *ipc_policies;
|
list_t *ipc_policies;
|
||||||
|
|
||||||
// The keysym to keycode translation
|
// The keysym to keycode translation
|
||||||
struct keysym_translation_data keysym_translation;
|
struct xkb_state *keysym_translation_state;
|
||||||
|
|
||||||
// Context for command handlers
|
// Context for command handlers
|
||||||
struct {
|
struct {
|
||||||
|
|
|
@ -604,7 +604,7 @@ struct keycode_matches {
|
||||||
static void find_keycode(struct xkb_keymap *keymap,
|
static void find_keycode(struct xkb_keymap *keymap,
|
||||||
xkb_keycode_t keycode, void *data) {
|
xkb_keycode_t keycode, void *data) {
|
||||||
xkb_keysym_t keysym = xkb_state_key_get_one_sym(
|
xkb_keysym_t keysym = xkb_state_key_get_one_sym(
|
||||||
config->keysym_translation.xkb_state, keycode);
|
config->keysym_translation_state, keycode);
|
||||||
|
|
||||||
if (keysym == XKB_KEY_NoSymbol) {
|
if (keysym == XKB_KEY_NoSymbol) {
|
||||||
return;
|
return;
|
||||||
|
@ -627,7 +627,8 @@ static struct keycode_matches get_keycode_for_keysym(xkb_keysym_t keysym) {
|
||||||
.count = 0,
|
.count = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
xkb_keymap_key_for_each(config->keysym_translation.xkb_keymap,
|
xkb_keymap_key_for_each(
|
||||||
|
xkb_state_get_keymap(config->keysym_translation_state),
|
||||||
find_keycode, &matches);
|
find_keycode, &matches);
|
||||||
return matches;
|
return matches;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
struct sway_config *config = NULL;
|
struct sway_config *config = NULL;
|
||||||
|
|
||||||
static struct keysym_translation_data new_keysym_translation_data(
|
static struct xkb_state *keysym_translation_state_create(
|
||||||
const char *layout) {
|
const char *layout) {
|
||||||
struct xkb_rule_names rules = {
|
struct xkb_rule_names rules = {
|
||||||
.layout = layout,
|
.layout = layout,
|
||||||
|
@ -44,18 +44,13 @@ static struct keysym_translation_data new_keysym_translation_data(
|
||||||
&rules,
|
&rules,
|
||||||
XKB_KEYMAP_COMPILE_NO_FLAGS);
|
XKB_KEYMAP_COMPILE_NO_FLAGS);
|
||||||
|
|
||||||
struct keysym_translation_data result = {
|
return xkb_state_new(xkb_keymap);
|
||||||
.xkb_keymap = xkb_keymap,
|
|
||||||
.xkb_state = xkb_state_new(xkb_keymap),
|
|
||||||
};
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_keysym_translation_data(
|
static void keysym_translation_state_destroy(
|
||||||
struct keysym_translation_data config) {
|
struct xkb_state *state) {
|
||||||
xkb_state_unref(config.xkb_state);
|
xkb_keymap_unref(xkb_state_get_keymap(state));
|
||||||
xkb_keymap_unref(config.xkb_keymap);
|
xkb_state_unref(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_mode(struct sway_mode *mode) {
|
static void free_mode(struct sway_mode *mode) {
|
||||||
|
@ -171,7 +166,7 @@ void free_config(struct sway_config *config) {
|
||||||
free(config->swaynag_command);
|
free(config->swaynag_command);
|
||||||
free((char *)config->current_config_path);
|
free((char *)config->current_config_path);
|
||||||
free((char *)config->current_config);
|
free((char *)config->current_config);
|
||||||
free_keysym_translation_data(config->keysym_translation);
|
keysym_translation_state_destroy(config->keysym_translation_state);
|
||||||
free(config);
|
free(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,7 +339,8 @@ static void config_defaults(struct sway_config *config) {
|
||||||
if (!(config->ipc_policies = create_list())) goto cleanup;
|
if (!(config->ipc_policies = create_list())) goto cleanup;
|
||||||
|
|
||||||
// The keysym to keycode translation
|
// The keysym to keycode translation
|
||||||
config->keysym_translation = new_keysym_translation_data(getenv("XKB_DEFAULT_LAYOUT"));
|
config->keysym_translation_state =
|
||||||
|
keysym_translation_state_create(getenv("XKB_DEFAULT_LAYOUT"));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
cleanup:
|
cleanup:
|
||||||
|
@ -992,8 +988,8 @@ static void translate_binding_list(list_t *bindings, list_t *bindsyms,
|
||||||
}
|
}
|
||||||
|
|
||||||
void translate_keysyms(const char *layout) {
|
void translate_keysyms(const char *layout) {
|
||||||
free_keysym_translation_data(config->keysym_translation);
|
keysym_translation_state_destroy(config->keysym_translation_state);
|
||||||
config->keysym_translation = new_keysym_translation_data(layout);
|
config->keysym_translation_state = keysym_translation_state_create(layout);
|
||||||
|
|
||||||
for (int i = 0; i < config->modes->length; ++i) {
|
for (int i = 0; i < config->modes->length; ++i) {
|
||||||
struct sway_mode *mode = config->modes->items[i];
|
struct sway_mode *mode = config->modes->items[i];
|
||||||
|
|
Loading…
Reference in a new issue