config: simplify keysym translation fields

Do not store `xkb_keymap` since it can be retrieved from `xkb_state`.
This commit is contained in:
Konstantin Pospelov 2019-02-19 16:35:35 +03:00 committed by Simon Ser
parent a09c144b8b
commit f1609abe4c
3 changed files with 15 additions and 26 deletions

View file

@ -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 {

View file

@ -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;
} }

View file

@ -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];