mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	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
					
				
					 3 changed files with 15 additions and 26 deletions
				
			
		| 
						 | 
				
			
			@ -604,7 +604,7 @@ struct keycode_matches {
 | 
			
		|||
static void find_keycode(struct xkb_keymap *keymap,
 | 
			
		||||
		xkb_keycode_t keycode, void *data) {
 | 
			
		||||
	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) {
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -627,7 +627,8 @@ static struct keycode_matches get_keycode_for_keysym(xkb_keysym_t keysym) {
 | 
			
		|||
		.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);
 | 
			
		||||
	return matches;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@
 | 
			
		|||
 | 
			
		||||
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) {
 | 
			
		||||
	struct xkb_rule_names rules = {
 | 
			
		||||
		.layout = layout,
 | 
			
		||||
| 
						 | 
				
			
			@ -44,18 +44,13 @@ static struct keysym_translation_data new_keysym_translation_data(
 | 
			
		|||
		&rules,
 | 
			
		||||
		XKB_KEYMAP_COMPILE_NO_FLAGS);
 | 
			
		||||
 | 
			
		||||
	struct keysym_translation_data result = {
 | 
			
		||||
		.xkb_keymap = xkb_keymap,
 | 
			
		||||
		.xkb_state = xkb_state_new(xkb_keymap),
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	return result;
 | 
			
		||||
	return xkb_state_new(xkb_keymap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void free_keysym_translation_data(
 | 
			
		||||
		struct keysym_translation_data config) {
 | 
			
		||||
	xkb_state_unref(config.xkb_state);
 | 
			
		||||
	xkb_keymap_unref(config.xkb_keymap);
 | 
			
		||||
static void keysym_translation_state_destroy(
 | 
			
		||||
		struct xkb_state *state) {
 | 
			
		||||
	xkb_keymap_unref(xkb_state_get_keymap(state));
 | 
			
		||||
	xkb_state_unref(state);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void free_mode(struct sway_mode *mode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +166,7 @@ void free_config(struct sway_config *config) {
 | 
			
		|||
	free(config->swaynag_command);
 | 
			
		||||
	free((char *)config->current_config_path);
 | 
			
		||||
	free((char *)config->current_config);
 | 
			
		||||
	free_keysym_translation_data(config->keysym_translation);
 | 
			
		||||
	keysym_translation_state_destroy(config->keysym_translation_state);
 | 
			
		||||
	free(config);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -344,7 +339,8 @@ static void config_defaults(struct sway_config *config) {
 | 
			
		|||
	if (!(config->ipc_policies = create_list())) goto cleanup;
 | 
			
		||||
 | 
			
		||||
	// 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;
 | 
			
		||||
cleanup:
 | 
			
		||||
| 
						 | 
				
			
			@ -992,8 +988,8 @@ static void translate_binding_list(list_t *bindings, list_t *bindsyms,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void translate_keysyms(const char *layout) {
 | 
			
		||||
	free_keysym_translation_data(config->keysym_translation);
 | 
			
		||||
	config->keysym_translation = new_keysym_translation_data(layout);
 | 
			
		||||
	keysym_translation_state_destroy(config->keysym_translation_state);
 | 
			
		||||
	config->keysym_translation_state = keysym_translation_state_create(layout);
 | 
			
		||||
 | 
			
		||||
	for (int i = 0; i < config->modes->length; ++i) {
 | 
			
		||||
		struct sway_mode *mode = config->modes->items[i];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue