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