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;
}
}
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)) {
- drawcol = dc.col[defaultrcs];
- 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;