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:
		
							parent
							
								
									b6d280de6d
								
							
						
					
					
						commit
						d2b75db8d7
					
				| @ -162,7 +162,8 @@ static uint forcemousemod = ShiftMask; | |||||||
|  * Beware that overloading Button1 will disable the selection. |  * Beware that overloading Button1 will disable the selection. | ||||||
|  */ |  */ | ||||||
| static MouseShortcut mshortcuts[] = { | 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,           Button4, ttysend,        {.s = "\031"} }, | ||||||
| 	{ XK_ANY_MOD,           Button5, ttysend,        {.s = "\005"} }, | 	{ XK_ANY_MOD,           Button5, ttysend,        {.s = "\005"} }, | ||||||
| }; | }; | ||||||
|  | |||||||
							
								
								
									
										35
									
								
								x.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								x.c
									
									
									
									
									
								
							| @ -33,6 +33,7 @@ typedef struct { | |||||||
| 	uint button; | 	uint button; | ||||||
| 	void (*func)(const Arg *); | 	void (*func)(const Arg *); | ||||||
| 	const Arg arg; | 	const Arg arg; | ||||||
|  | 	uint  release; | ||||||
| } MouseShortcut; | } MouseShortcut; | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
| @ -165,6 +166,7 @@ static void kpress(XEvent *); | |||||||
| static void cmessage(XEvent *); | static void cmessage(XEvent *); | ||||||
| static void resize(XEvent *); | static void resize(XEvent *); | ||||||
| static void focus(XEvent *); | static void focus(XEvent *); | ||||||
|  | static int mouseaction(XEvent *, uint); | ||||||
| static void brelease(XEvent *); | static void brelease(XEvent *); | ||||||
| static void bpress(XEvent *); | static void bpress(XEvent *); | ||||||
| static void bmotion(XEvent *); | static void bmotion(XEvent *); | ||||||
| @ -416,11 +418,27 @@ mousereport(XEvent *e) | |||||||
| 	ttywrite(buf, len, 0); | 	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 | void | ||||||
| bpress(XEvent *e) | bpress(XEvent *e) | ||||||
| { | { | ||||||
| 	struct timespec now; | 	struct timespec now; | ||||||
| 	MouseShortcut *ms; |  | ||||||
| 	int snap; | 	int snap; | ||||||
| 
 | 
 | ||||||
| 	if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) { | 	if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) { | ||||||
| @ -428,13 +446,8 @@ bpress(XEvent *e) | |||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) { | 	if (mouseaction(e, 0)) | ||||||
| 		if (e->xbutton.button == ms->button && | 		return; | ||||||
| 		    match(ms->mod, e->xbutton.state & ~forcemousemod)) { |  | ||||||
| 			ms->func(&(ms->arg)); |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	if (e->xbutton.button == Button1) { | 	if (e->xbutton.button == Button1) { | ||||||
| 		/*
 | 		/*
 | ||||||
| @ -655,9 +668,9 @@ brelease(XEvent *e) | |||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (e->xbutton.button == Button2) | 	if (mouseaction(e, 1)) | ||||||
| 		selpaste(NULL); | 		return; | ||||||
| 	else if (e->xbutton.button == Button1) | 	if (e->xbutton.button == Button1) | ||||||
| 		mousesel(e, 1); | 		mousesel(e, 1); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user