fix: send implicit_mod to process_bindings (#176)
* fix: send implicit_mod to process_bindings this solves the edge case where someone might have `ShiftMask + A` in their keybindings compared to a plain `A`. Closes: https://github.com/nsxiv/nsxiv/pull/166#issuecomment-978853136 * code-style: smuggle small style fix in win_draw_bar now mimics autoreload_nop.c functions
This commit is contained in:
		@@ -35,7 +35,7 @@ void arl_setup(arl_t *arl, const char *filepath)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool arl_handle(arl_t *arl)
 | 
			
		||||
{ 
 | 
			
		||||
{
 | 
			
		||||
	(void) arl;
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								main.c
									
									
									
									
									
								
							@@ -605,15 +605,15 @@ end:
 | 
			
		||||
	redraw();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool process_bindings(const keymap_t *keys, unsigned int len,
 | 
			
		||||
                             KeySym ksym_or_button, unsigned int state)
 | 
			
		||||
static bool process_bindings(const keymap_t *keys, unsigned int len, KeySym ksym_or_button,
 | 
			
		||||
                             unsigned int state, unsigned int implicit_mod)
 | 
			
		||||
{
 | 
			
		||||
	unsigned int i;
 | 
			
		||||
	bool dirty = false;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < len; i++) {
 | 
			
		||||
		if (keys[i].ksym_or_button == ksym_or_button &&
 | 
			
		||||
		    MODMASK(keys[i].mask) == MODMASK(state) &&
 | 
			
		||||
		    MODMASK(keys[i].mask | implicit_mod) == MODMASK(state) &&
 | 
			
		||||
		    keys[i].cmd.func &&
 | 
			
		||||
		    (keys[i].cmd.mode == MODE_ALL || keys[i].cmd.mode == mode))
 | 
			
		||||
		{
 | 
			
		||||
@@ -652,7 +652,7 @@ static void on_keypress(XKeyEvent *kev)
 | 
			
		||||
		prefix = prefix * 10 + (int) (key - '0');
 | 
			
		||||
		return;
 | 
			
		||||
	} else {
 | 
			
		||||
		dirty = process_bindings(keys, ARRLEN(keys), ksym, kev->state & ~sh);
 | 
			
		||||
		dirty = process_bindings(keys, ARRLEN(keys), ksym, kev->state, sh);
 | 
			
		||||
	}
 | 
			
		||||
	if (dirty)
 | 
			
		||||
		redraw();
 | 
			
		||||
@@ -668,7 +668,7 @@ static void on_buttonpress(XButtonEvent *bev)
 | 
			
		||||
	if (mode == MODE_IMAGE) {
 | 
			
		||||
		set_timeout(reset_cursor, TO_CURSOR_HIDE, true);
 | 
			
		||||
		reset_cursor();
 | 
			
		||||
		dirty = process_bindings(buttons, ARRLEN(buttons), bev->button, bev->state);
 | 
			
		||||
		dirty = process_bindings(buttons, ARRLEN(buttons), bev->button, bev->state, 0);
 | 
			
		||||
		if (dirty)
 | 
			
		||||
			redraw();
 | 
			
		||||
	} else {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user