uint b;
uint mask;
char *s;
-} Mousekey;
+} MouseShortcut;
typedef struct {
KeySym k;
void
selinit(void)
{
- memset(&sel.tclick1, 0, sizeof(sel.tclick1));
- memset(&sel.tclick2, 0, sizeof(sel.tclick2));
+ clock_gettime(CLOCK_MONOTONIC, &sel.tclick1);
+ clock_gettime(CLOCK_MONOTONIC, &sel.tclick2);
sel.mode = SEL_IDLE;
+ sel.snap = 0;
sel.ob.x = -1;
sel.primary = NULL;
sel.clipboard = NULL;
bpress(XEvent *e)
{
struct timespec now;
- Mousekey *mk;
+ MouseShortcut *ms;
if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
mousereport(e);
return;
}
- for (mk = mshortcuts; mk < mshortcuts + LEN(mshortcuts); mk++) {
- if (e->xbutton.button == mk->b
- && match(mk->mask, e->xbutton.state)) {
- ttysend(mk->s, strlen(mk->s));
+ for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
+ if (e->xbutton.button == ms->b
+ && match(ms->mask, e->xbutton.state)) {
+ ttysend(ms->s, strlen(ms->s));
return;
}
}
Glyph g = {' ', ATTR_NULL, defaultbg, defaultcs}, og;
int ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN);
Color drawcol;
- XRenderColor dccol;
LIMIT(oldx, 0, term.col-1);
LIMIT(oldy, 0, term.row-1);
xdrawglyph(og, oldx, oldy);
g.u = term.line[term.c.y][term.c.x].u;
- if (ena_sel && selected(term.c.x, term.c.y)) {
- /*
- * Allocate the drawing color which is the reverse of
- * defaultcs, if we are selected.
- */
- dccol.red = ~dc.col[defaultcs].color.red;
- dccol.green = ~dc.col[defaultcs].color.green;
- dccol.blue = ~dc.col[defaultcs].color.blue;
- dccol.alpha = ~dc.col[defaultcs].color.alpha;
- XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &dccol, &drawcol);
- g.mode ^= ATTR_REVERSE;
+ /*
+ * Select the right color for the right mode.
+ */
+ if (IS_SET(MODE_REVERSE)) {
+ g.mode |= ATTR_REVERSE;
+ g.bg = defaultfg;
+ if (ena_sel && selected(term.c.x, term.c.y)) {
+ drawcol = dc.col[defaultcs];
+ g.fg = defaultrcs;
+ } else {
+ drawcol = dc.col[defaultrcs];
+ g.fg = defaultcs;
+ }
} else {
- drawcol = dc.col[defaultcs];
+ if (ena_sel && selected(term.c.x, term.c.y)) {
+ drawcol = dc.col[defaultrcs];
+ g.fg = defaultfg;
+ g.bg = defaultrcs;
+ } else {
+ drawcol = dc.col[defaultcs];
+ }
}
if (IS_SET(MODE_HIDE))
/* draw the new one */
if (xw.state & WIN_FOCUSED) {
switch (xw.cursor) {
+ case 7: /* st extension: snowman */
+ utf8decode("☃", &g.u, UTF_SIZ);
case 0: /* Blinking Block */
case 1: /* Blinking Block (Default) */
case 2: /* Steady Block */
- if (IS_SET(MODE_REVERSE)) {
- g.mode |= ATTR_REVERSE;
- g.fg = defaultcs;
- g.bg = defaultfg;
- }
-
g.mode |= term.line[term.c.y][curx].mode & ATTR_WIDE;
xdrawglyph(g, term.c.x, term.c.y);
break;
case 4: /* Steady Underline */
XftDrawRect(xw.draw, &drawcol,
borderpx + curx * xw.cw,
- borderpx + (term.c.y + 1) * xw.ch - cursorthickness,
+ borderpx + (term.c.y + 1) * xw.ch - \
+ cursorthickness,
xw.cw, cursorthickness);
break;
case 5: /* Blinking bar */