diff options
| author | Avi Halachmi (:avih) <avihpit@yahoo.com> | 2019-10-11 02:26:10 +0300 | 
|---|---|---|
| committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2019-10-13 21:46:31 +0200 | 
| commit | d2b75db8d7519a20af8bf09e9c205507f9ff828c (patch) | |
| tree | 1e17b52c9f25afa685e2e3e5ce7fbd23ef7127d6 | |
| parent | b6d280de6df30167ce9cf30fadefc362e77729e7 (diff) | |
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.
| -rw-r--r-- | config.def.h | 3 | ||||
| -rw-r--r-- | x.c | 35 | 
2 files changed, 26 insertions, 12 deletions
| diff --git a/config.def.h b/config.def.h index a0a0d2d..546edda 100644 --- a/config.def.h +++ b/config.def.h @@ -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"} },  }; @@ -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);  } | 
