mouse shortcuts: don't hardcode selpaste
Because selpaste is activated on release, a release flag was added to mouse shortcuts which controls whether activation is on press/release, and selpaste binding to button2 was moved to config.h . button1 remains the only hardcoded mouse button - for selection + copy.
This commit is contained in:
		
				
					committed by
					
						
						Hiltjo Posthuma
					
				
			
			
				
	
			
			
			
						parent
						
							b6d280de6d
						
					
				
				
					commit
					d2b75db8d7
				
			@@ -162,7 +162,8 @@ static uint forcemousemod = ShiftMask;
 | 
			
		||||
 * Beware that overloading Button1 will disable the selection.
 | 
			
		||||
 */
 | 
			
		||||
static MouseShortcut mshortcuts[] = {
 | 
			
		||||
	/* mask                 button   function        argument */
 | 
			
		||||
	/* mask                 button   function        argument       release */
 | 
			
		||||
	{ XK_ANY_MOD,           Button2, selpaste,       {.i = 0},      1 },
 | 
			
		||||
	{ XK_ANY_MOD,           Button4, ttysend,        {.s = "\031"} },
 | 
			
		||||
	{ XK_ANY_MOD,           Button5, ttysend,        {.s = "\005"} },
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								x.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								x.c
									
									
									
									
									
								
							@@ -33,6 +33,7 @@ typedef struct {
 | 
			
		||||
	uint button;
 | 
			
		||||
	void (*func)(const Arg *);
 | 
			
		||||
	const Arg arg;
 | 
			
		||||
	uint  release;
 | 
			
		||||
} MouseShortcut;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
@@ -165,6 +166,7 @@ static void kpress(XEvent *);
 | 
			
		||||
static void cmessage(XEvent *);
 | 
			
		||||
static void resize(XEvent *);
 | 
			
		||||
static void focus(XEvent *);
 | 
			
		||||
static int mouseaction(XEvent *, uint);
 | 
			
		||||
static void brelease(XEvent *);
 | 
			
		||||
static void bpress(XEvent *);
 | 
			
		||||
static void bmotion(XEvent *);
 | 
			
		||||
@@ -416,11 +418,27 @@ mousereport(XEvent *e)
 | 
			
		||||
	ttywrite(buf, len, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
mouseaction(XEvent *e, uint release)
 | 
			
		||||
{
 | 
			
		||||
	MouseShortcut *ms;
 | 
			
		||||
 | 
			
		||||
	for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
 | 
			
		||||
		if (ms->release == release &&
 | 
			
		||||
		    ms->button == e->xbutton.button &&
 | 
			
		||||
		    match(ms->mod, e->xbutton.state & ~forcemousemod)) {
 | 
			
		||||
			ms->func(&(ms->arg));
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
bpress(XEvent *e)
 | 
			
		||||
{
 | 
			
		||||
	struct timespec now;
 | 
			
		||||
	MouseShortcut *ms;
 | 
			
		||||
	int snap;
 | 
			
		||||
 | 
			
		||||
	if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) {
 | 
			
		||||
@@ -428,13 +446,8 @@ bpress(XEvent *e)
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
 | 
			
		||||
		if (e->xbutton.button == ms->button &&
 | 
			
		||||
		    match(ms->mod, e->xbutton.state & ~forcemousemod)) {
 | 
			
		||||
			ms->func(&(ms->arg));
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (mouseaction(e, 0))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (e->xbutton.button == Button1) {
 | 
			
		||||
		/*
 | 
			
		||||
@@ -655,9 +668,9 @@ brelease(XEvent *e)
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (e->xbutton.button == Button2)
 | 
			
		||||
		selpaste(NULL);
 | 
			
		||||
	else if (e->xbutton.button == Button1)
 | 
			
		||||
	if (mouseaction(e, 1))
 | 
			
		||||
		return;
 | 
			
		||||
	if (e->xbutton.button == Button1)
 | 
			
		||||
		mousesel(e, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user