|
@ -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 y2row(int); |
|
|
|
|
|
|
|
|
static int evcol(XEvent *); |
|
|
|
|
|
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), |
|
|
|
|
|
button = e->xbutton.button, state = e->xbutton.state, |
|
|
|
|
|
len; |
|
|
|
|
|
|
|
|
int len, x = evcol(e), y = evrow(e), |
|
|
|
|
|
button = e->xbutton.button, state = e->xbutton.state; |
|
|
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) { |
|
|