Introduction
Introduction Statistics Contact Development Disclaimer Help
tMove remaining selection mode logic into selextend - st - [fork] customized bu…
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit cfc7acdfd923924ae150a32061fb95987697b159
parent bcb5d3adbe57ead05a829e5144c2ba1dc465865f
Author: Devin J. Pohly <[email protected]>
Date: Wed, 21 Feb 2018 23:54:29 -0600
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 <[email protected]>
Diffstat:
M st.c | 14 ++++++++++++--
M st.h | 3 +--
M x.c | 27 +++++++++------------------
3 files changed, 22 insertions(+), 22 deletions(-)
---
diff --git a/st.c b/st.c
t@@ -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;
t@@ -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;
t@@ -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
diff --git a/st.h b/st.h
t@@ -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);
t@@ -198,7 +198,6 @@ char *xstrdup(char *);
/* Globals */
extern Term term;
-extern Selection sel;
extern int cmdfd;
extern pid_t pid;
extern int oldbutton;
diff --git a/x.c b/x.c
t@@ -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);
t@@ -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);
t@@ -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
t@@ -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
t@@ -650,11 +645,7 @@ bmotion(XEvent *e)
return;
}
- if (!sel.mode)
- return;
-
- sel.mode = SEL_READY;
- mousesel(e);
+ mousesel(e, 0);
}
void
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.