diff options
| author | Devin J. Pohly <djpohly@gmail.com> | 2018-02-21 23:54:29 -0600 | 
|---|---|---|
| committer | Devin J. Pohly <djpohly@gmail.com> | 2018-02-25 21:53:24 -0600 | 
| commit | cfc7acdfd923924ae150a32061fb95987697b159 (patch) | |
| tree | 81b6e86f3f21c1263c58880ccc0e45ac885cf627 | |
| parent | bcb5d3adbe57ead05a829e5144c2ba1dc465865f (diff) | |
| download | st-transparency-cfc7acdfd923924ae150a32061fb95987697b159.tar.gz st-transparency-cfc7acdfd923924ae150a32061fb95987697b159.tar.xz st-transparency-cfc7acdfd923924ae150a32061fb95987697b159.zip | |
Move remaining selection mode logic into selextend
The "done" parameter indicates a change which finalizes the selection
(e.g. a mouse button release as opposed to motion).
Signed-off-by: Devin J. Pohly <djpohly@gmail.com>
| -rw-r--r-- | st.c | 14 | ||||
| -rw-r--r-- | st.h | 3 | ||||
| -rw-r--r-- | x.c | 27 | 
3 files changed, 22 insertions, 22 deletions
| @@ -167,11 +167,11 @@ static ssize_t xwrite(int, const char *, size_t);  /* Globals */  Term term; -Selection sel;  int cmdfd;  pid_t pid;  int oldbutton   = 3; /* button event on startup: 3 = release */ +static Selection sel;  static CSIEscape csiescseq;  static STREscape strescseq;  static int iofd = 1; @@ -402,9 +402,17 @@ selstart(int col, int row, int snap)  }  void -selextend(int col, int row, int type) +selextend(int col, int row, int type, int done)  {  	int oldey, oldex, oldsby, oldsey, oldtype; + +	if (!sel.mode) +		return; +	if (done && sel.mode == SEL_EMPTY) { +		selclear(); +		return; +	} +  	oldey = sel.oe.y;  	oldex = sel.oe.x;  	oldsby = sel.nb.y; @@ -419,6 +427,8 @@ selextend(int col, int row, int type)  	if (oldey != sel.oe.y || oldex != sel.oe.x || oldtype != sel.type)  		tsetdirt(MIN(sel.nb.y, oldsby), MAX(sel.ne.y, oldsey)); + +	sel.mode = done ? SEL_IDLE : SEL_READY;  }  void @@ -184,7 +184,7 @@ void resettitle(void);  void selclear(void);  void selinit(void);  void selstart(int, int, int); -void selextend(int, int, int); +void selextend(int, int, int, int);  void selnormalize(void);  int selected(int, int);  char *getsel(void); @@ -198,7 +198,6 @@ char *xstrdup(char *);  /* Globals */  extern Term term; -extern Selection sel;  extern int cmdfd;  extern pid_t pid;  extern int oldbutton; @@ -157,7 +157,7 @@ static void selnotify(XEvent *);  static void selclear_(XEvent *);  static void selrequest(XEvent *);  static void setsel(char *, Time); -static void mousesel(XEvent *); +static void mousesel(XEvent *, int);  static void mousereport(XEvent *);  static char *kmap(KeySym, uint);  static int match(uint, uint); @@ -313,7 +313,7 @@ y2row(int y)  }  void -mousesel(XEvent *e) +mousesel(XEvent *e, int done)  {  	int type, seltype = SEL_REGULAR;  	uint state = e->xbutton.state & ~(Button1Mask | forceselmod); @@ -324,8 +324,9 @@ mousesel(XEvent *e)  			break;  		}  	} - -	selextend(x2col(e->xbutton.x), y2row(e->xbutton.y), seltype); +	selextend(x2col(e->xbutton.x), y2row(e->xbutton.y), seltype, done); +	if (done) +		setsel(getsel(), e->xbutton.time);  }  void @@ -630,16 +631,10 @@ brelease(XEvent *e)  		return;  	} -	if (e->xbutton.button == Button2) { +	if (e->xbutton.button == Button2)  		selpaste(NULL); -	} else if (e->xbutton.button == Button1) { -		if (sel.mode == SEL_READY) { -			mousesel(e); -			setsel(getsel(), e->xbutton.time); -		} else -			selclear_(NULL); -		sel.mode = SEL_IDLE; -	} +	else if (e->xbutton.button == Button1) +		mousesel(e, 1);  }  void @@ -650,11 +645,7 @@ bmotion(XEvent *e)  		return;  	} -	if (!sel.mode) -		return; - -	sel.mode = SEL_READY; -	mousesel(e); +	mousesel(e, 0);  }  void | 
