|
|
@ -149,8 +149,8 @@ static void xunloadfont(Font *);
|
|
|
|
static void xunloadfonts(void);
|
|
|
|
static void xunloadfonts(void);
|
|
|
|
static void xsetenv(void);
|
|
|
|
static void xsetenv(void);
|
|
|
|
static void xseturgency(int);
|
|
|
|
static void xseturgency(int);
|
|
|
|
static int x2col(int);
|
|
|
|
static int evcol(XEvent *);
|
|
|
|
static int y2row(int);
|
|
|
|
static int evrow(XEvent *);
|
|
|
|
|
|
|
|
|
|
|
|
static void expose(XEvent *);
|
|
|
|
static void expose(XEvent *);
|
|
|
|
static void visibility(XEvent *);
|
|
|
|
static void visibility(XEvent *);
|
|
|
@ -308,17 +308,17 @@ zoomreset(const Arg *arg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
int
|
|
|
|
x2col(int x)
|
|
|
|
evcol(XEvent *e)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
x -= borderpx;
|
|
|
|
int x = e->xbutton.x - borderpx;
|
|
|
|
LIMIT(x, 0, win.tw - 1);
|
|
|
|
LIMIT(x, 0, win.tw - 1);
|
|
|
|
return x / win.cw;
|
|
|
|
return x / win.cw;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
int
|
|
|
|
y2row(int y)
|
|
|
|
evrow(XEvent *e)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
y -= borderpx;
|
|
|
|
int y = e->xbutton.y - borderpx;
|
|
|
|
LIMIT(y, 0, win.th - 1);
|
|
|
|
LIMIT(y, 0, win.th - 1);
|
|
|
|
return y / win.ch;
|
|
|
|
return y / win.ch;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -335,7 +335,7 @@ mousesel(XEvent *e, int done)
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
selextend(x2col(e->xbutton.x), y2row(e->xbutton.y), seltype, done);
|
|
|
|
selextend(evcol(e), evrow(e), seltype, done);
|
|
|
|
if (done)
|
|
|
|
if (done)
|
|
|
|
setsel(getsel(), e->xbutton.time);
|
|
|
|
setsel(getsel(), e->xbutton.time);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -343,9 +343,8 @@ mousesel(XEvent *e, int done)
|
|
|
|
void
|
|
|
|
void
|
|
|
|
mousereport(XEvent *e)
|
|
|
|
mousereport(XEvent *e)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int x = x2col(e->xbutton.x), y = y2row(e->xbutton.y),
|
|
|
|
int len, x = evcol(e), y = evrow(e),
|
|
|
|
button = e->xbutton.button, state = e->xbutton.state,
|
|
|
|
button = e->xbutton.button, state = e->xbutton.state;
|
|
|
|
len;
|
|
|
|
|
|
|
|
char buf[40];
|
|
|
|
char buf[40];
|
|
|
|
static int ox, oy;
|
|
|
|
static int ox, oy;
|
|
|
|
|
|
|
|
|
|
|
@ -440,7 +439,7 @@ bpress(XEvent *e)
|
|
|
|
xsel.tclick2 = xsel.tclick1;
|
|
|
|
xsel.tclick2 = xsel.tclick1;
|
|
|
|
xsel.tclick1 = now;
|
|
|
|
xsel.tclick1 = now;
|
|
|
|
|
|
|
|
|
|
|
|
selstart(x2col(e->xbutton.x), y2row(e->xbutton.y), snap);
|
|
|
|
selstart(evcol(e), evrow(e), snap);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -464,18 +463,16 @@ selnotify(XEvent *e)
|
|
|
|
ulong nitems, ofs, rem;
|
|
|
|
ulong nitems, ofs, rem;
|
|
|
|
int format;
|
|
|
|
int format;
|
|
|
|
uchar *data, *last, *repl;
|
|
|
|
uchar *data, *last, *repl;
|
|
|
|
Atom type, incratom, property;
|
|
|
|
Atom type, incratom, property = None;
|
|
|
|
|
|
|
|
|
|
|
|
incratom = XInternAtom(xw.dpy, "INCR", 0);
|
|
|
|
incratom = XInternAtom(xw.dpy, "INCR", 0);
|
|
|
|
|
|
|
|
|
|
|
|
ofs = 0;
|
|
|
|
ofs = 0;
|
|
|
|
if (e->type == SelectionNotify) {
|
|
|
|
if (e->type == SelectionNotify)
|
|
|
|
property = e->xselection.property;
|
|
|
|
property = e->xselection.property;
|
|
|
|
} else if(e->type == PropertyNotify) {
|
|
|
|
else if (e->type == PropertyNotify)
|
|
|
|
property = e->xproperty.atom;
|
|
|
|
property = e->xproperty.atom;
|
|
|
|
} else {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (property == None)
|
|
|
|
if (property == None)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
@ -625,7 +622,7 @@ setsel(char *str, Time t)
|
|
|
|
|
|
|
|
|
|
|
|
XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, t);
|
|
|
|
XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, t);
|
|
|
|
if (XGetSelectionOwner(xw.dpy, XA_PRIMARY) != xw.win)
|
|
|
|
if (XGetSelectionOwner(xw.dpy, XA_PRIMARY) != xw.win)
|
|
|
|
selclear_(NULL);
|
|
|
|
selclear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
@ -1407,12 +1404,13 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
|
|
|
|
og.mode ^= ATTR_REVERSE;
|
|
|
|
og.mode ^= ATTR_REVERSE;
|
|
|
|
xdrawglyph(og, ox, oy);
|
|
|
|
xdrawglyph(og, ox, oy);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (IS_SET(MODE_HIDE))
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Select the right color for the right mode.
|
|
|
|
* Select the right color for the right mode.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
g.mode &= ATTR_BOLD|ATTR_ITALIC|ATTR_UNDERLINE|ATTR_STRUCK|ATTR_WIDE;
|
|
|
|
g.mode &= ATTR_BOLD|ATTR_ITALIC|ATTR_UNDERLINE|ATTR_STRUCK|ATTR_WIDE;
|
|
|
|
g.fg = defaultbg;
|
|
|
|
|
|
|
|
g.bg = defaultcs;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (IS_SET(MODE_REVERSE)) {
|
|
|
|
if (IS_SET(MODE_REVERSE)) {
|
|
|
|
g.mode |= ATTR_REVERSE;
|
|
|
|
g.mode |= ATTR_REVERSE;
|
|
|
@ -1426,17 +1424,15 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if (selected(cx, cy)) {
|
|
|
|
if (selected(cx, cy)) {
|
|
|
|
drawcol = dc.col[defaultrcs];
|
|
|
|
|
|
|
|
g.fg = defaultfg;
|
|
|
|
g.fg = defaultfg;
|
|
|
|
g.bg = defaultrcs;
|
|
|
|
g.bg = defaultrcs;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
drawcol = dc.col[defaultcs];
|
|
|
|
g.fg = defaultbg;
|
|
|
|
|
|
|
|
g.bg = defaultcs;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
drawcol = dc.col[g.bg];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (IS_SET(MODE_HIDE))
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* draw the new one */
|
|
|
|
/* draw the new one */
|
|
|
|
if (IS_SET(MODE_FOCUSED)) {
|
|
|
|
if (IS_SET(MODE_FOCUSED)) {
|
|
|
|
switch (win.cursor) {
|
|
|
|
switch (win.cursor) {
|
|
|
|