diff options
Diffstat (limited to 'x.c')
-rw-r--r-- | x.c | 50 |
1 files changed, 31 insertions, 19 deletions
@@ -51,6 +51,7 @@ typedef struct { | |||
51 | /* function definitions used in config.h */ | 51 | /* function definitions used in config.h */ |
52 | static void clipcopy(const Arg *); | 52 | static void clipcopy(const Arg *); |
53 | static void clippaste(const Arg *); | 53 | static void clippaste(const Arg *); |
54 | static void numlock(const Arg *); | ||
54 | static void selpaste(const Arg *); | 55 | static void selpaste(const Arg *); |
55 | static void zoom(const Arg *); | 56 | static void zoom(const Arg *); |
56 | static void zoomabs(const Arg *); | 57 | static void zoomabs(const Arg *); |
@@ -64,6 +65,7 @@ static void zoomreset(const Arg *); | |||
64 | #define XEMBED_FOCUS_OUT 5 | 65 | #define XEMBED_FOCUS_OUT 5 |
65 | 66 | ||
66 | /* macros */ | 67 | /* macros */ |
68 | #define IS_SET(flag) ((win.mode & (flag)) != 0) | ||
67 | #define TRUERED(x) (((x) & 0xff0000) >> 8) | 69 | #define TRUERED(x) (((x) & 0xff0000) >> 8) |
68 | #define TRUEGREEN(x) (((x) & 0xff00)) | 70 | #define TRUEGREEN(x) (((x) & 0xff00)) |
69 | #define TRUEBLUE(x) (((x) & 0xff) << 8) | 71 | #define TRUEBLUE(x) (((x) & 0xff) << 8) |
@@ -196,11 +198,6 @@ static XWindow xw; | |||
196 | static XSelection xsel; | 198 | static XSelection xsel; |
197 | static TermWindow win; | 199 | static TermWindow win; |
198 | 200 | ||
199 | enum window_state { | ||
200 | WIN_VISIBLE = 1, | ||
201 | WIN_FOCUSED = 2 | ||
202 | }; | ||
203 | |||
204 | /* Font Ring Cache */ | 201 | /* Font Ring Cache */ |
205 | enum { | 202 | enum { |
206 | FRC_NORMAL, | 203 | FRC_NORMAL, |
@@ -264,6 +261,12 @@ selpaste(const Arg *dummy) | |||
264 | } | 261 | } |
265 | 262 | ||
266 | void | 263 | void |
264 | numlock(const Arg *dummy) | ||
265 | { | ||
266 | win.mode ^= MODE_NUMLOCK; | ||
267 | } | ||
268 | |||
269 | void | ||
267 | zoom(const Arg *arg) | 270 | zoom(const Arg *arg) |
268 | { | 271 | { |
269 | Arg larg; | 272 | Arg larg; |
@@ -1090,6 +1093,7 @@ xinit(void) | |||
1090 | XChangeProperty(xw.dpy, xw.win, xw.netwmpid, XA_CARDINAL, 32, | 1093 | XChangeProperty(xw.dpy, xw.win, xw.netwmpid, XA_CARDINAL, 32, |
1091 | PropModeReplace, (uchar *)&thispid, 1); | 1094 | PropModeReplace, (uchar *)&thispid, 1); |
1092 | 1095 | ||
1096 | win.mode = MODE_NUMLOCK; | ||
1093 | resettitle(); | 1097 | resettitle(); |
1094 | XMapWindow(xw.dpy, xw.win); | 1098 | XMapWindow(xw.dpy, xw.win); |
1095 | xhints(); | 1099 | xhints(); |
@@ -1319,14 +1323,13 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i | |||
1319 | fg = &revfg; | 1323 | fg = &revfg; |
1320 | } | 1324 | } |
1321 | 1325 | ||
1322 | |||
1323 | if (base.mode & ATTR_REVERSE) { | 1326 | if (base.mode & ATTR_REVERSE) { |
1324 | temp = fg; | 1327 | temp = fg; |
1325 | fg = bg; | 1328 | fg = bg; |
1326 | bg = temp; | 1329 | bg = temp; |
1327 | } | 1330 | } |
1328 | 1331 | ||
1329 | if (base.mode & ATTR_BLINK && term.mode & MODE_BLINK) | 1332 | if (base.mode & ATTR_BLINK && win.mode & MODE_BLINK) |
1330 | fg = bg; | 1333 | fg = bg; |
1331 | 1334 | ||
1332 | if (base.mode & ATTR_INVISIBLE) | 1335 | if (base.mode & ATTR_INVISIBLE) |
@@ -1440,7 +1443,7 @@ xdrawcursor(void) | |||
1440 | return; | 1443 | return; |
1441 | 1444 | ||
1442 | /* draw the new one */ | 1445 | /* draw the new one */ |
1443 | if (win.state & WIN_FOCUSED) { | 1446 | if (IS_SET(MODE_FOCUSED)) { |
1444 | switch (win.cursor) { | 1447 | switch (win.cursor) { |
1445 | case 7: /* st extension: snowman */ | 1448 | case 7: /* st extension: snowman */ |
1446 | utf8decode("☃", &g.u, UTF_SIZ); | 1449 | utf8decode("☃", &g.u, UTF_SIZ); |
@@ -1527,7 +1530,7 @@ drawregion(int x1, int y1, int x2, int y2) | |||
1527 | Glyph base, new; | 1530 | Glyph base, new; |
1528 | XftGlyphFontSpec *specs; | 1531 | XftGlyphFontSpec *specs; |
1529 | 1532 | ||
1530 | if (!(win.state & WIN_VISIBLE)) | 1533 | if (!(IS_SET(MODE_VISIBLE))) |
1531 | return; | 1534 | return; |
1532 | 1535 | ||
1533 | for (y = y1; y < y2; y++) { | 1536 | for (y = y1; y < y2; y++) { |
@@ -1575,13 +1578,13 @@ visibility(XEvent *ev) | |||
1575 | { | 1578 | { |
1576 | XVisibilityEvent *e = &ev->xvisibility; | 1579 | XVisibilityEvent *e = &ev->xvisibility; |
1577 | 1580 | ||
1578 | MODBIT(win.state, e->state != VisibilityFullyObscured, WIN_VISIBLE); | 1581 | MODBIT(win.mode, e->state != VisibilityFullyObscured, MODE_VISIBLE); |
1579 | } | 1582 | } |
1580 | 1583 | ||
1581 | void | 1584 | void |
1582 | unmap(XEvent *ev) | 1585 | unmap(XEvent *ev) |
1583 | { | 1586 | { |
1584 | win.state &= ~WIN_VISIBLE; | 1587 | win.mode &= ~MODE_VISIBLE; |
1585 | } | 1588 | } |
1586 | 1589 | ||
1587 | void | 1590 | void |
@@ -1591,6 +1594,15 @@ xsetpointermotion(int set) | |||
1591 | XChangeWindowAttributes(xw.dpy, xw.win, CWEventMask, &xw.attrs); | 1594 | XChangeWindowAttributes(xw.dpy, xw.win, CWEventMask, &xw.attrs); |
1592 | } | 1595 | } |
1593 | 1596 | ||
1597 | void | ||
1598 | xsetmode(int set, unsigned int flags) | ||
1599 | { | ||
1600 | int mode = win.mode; | ||
1601 | MODBIT(win.mode, set, flags); | ||
1602 | if ((win.mode & MODE_REVERSE) != (mode & MODE_REVERSE)) | ||
1603 | redraw(); | ||
1604 | } | ||
1605 | |||
1594 | int | 1606 | int |
1595 | xsetcursor(int cursor) | 1607 | xsetcursor(int cursor) |
1596 | { | 1608 | { |
@@ -1614,7 +1626,7 @@ xseturgency(int add) | |||
1614 | void | 1626 | void |
1615 | xbell(void) | 1627 | xbell(void) |
1616 | { | 1628 | { |
1617 | if (!(win.state & WIN_FOCUSED)) | 1629 | if (!(IS_SET(MODE_FOCUSED))) |
1618 | xseturgency(1); | 1630 | xseturgency(1); |
1619 | if (bellvolume) | 1631 | if (bellvolume) |
1620 | XkbBell(xw.dpy, xw.win, bellvolume, (Atom)NULL); | 1632 | XkbBell(xw.dpy, xw.win, bellvolume, (Atom)NULL); |
@@ -1630,13 +1642,13 @@ focus(XEvent *ev) | |||
1630 | 1642 | ||
1631 | if (ev->type == FocusIn) { | 1643 | if (ev->type == FocusIn) { |
1632 | XSetICFocus(xw.xic); | 1644 | XSetICFocus(xw.xic); |
1633 | win.state |= WIN_FOCUSED; | 1645 | win.mode |= MODE_FOCUSED; |
1634 | xseturgency(0); | 1646 | xseturgency(0); |
1635 | if (IS_SET(MODE_FOCUS)) | 1647 | if (IS_SET(MODE_FOCUS)) |
1636 | ttywrite("\033[I", 3, 0); | 1648 | ttywrite("\033[I", 3, 0); |
1637 | } else { | 1649 | } else { |
1638 | XUnsetICFocus(xw.xic); | 1650 | XUnsetICFocus(xw.xic); |
1639 | win.state &= ~WIN_FOCUSED; | 1651 | win.mode &= ~MODE_FOCUSED; |
1640 | if (IS_SET(MODE_FOCUS)) | 1652 | if (IS_SET(MODE_FOCUS)) |
1641 | ttywrite("\033[O", 3, 0); | 1653 | ttywrite("\033[O", 3, 0); |
1642 | } | 1654 | } |
@@ -1673,7 +1685,7 @@ kmap(KeySym k, uint state) | |||
1673 | 1685 | ||
1674 | if (IS_SET(MODE_APPKEYPAD) ? kp->appkey < 0 : kp->appkey > 0) | 1686 | if (IS_SET(MODE_APPKEYPAD) ? kp->appkey < 0 : kp->appkey > 0) |
1675 | continue; | 1687 | continue; |
1676 | if (term.numlock && kp->appkey == 2) | 1688 | if (IS_SET(MODE_NUMLOCK) && kp->appkey == 2) |
1677 | continue; | 1689 | continue; |
1678 | 1690 | ||
1679 | if (IS_SET(MODE_APPCURSOR) ? kp->appcursor < 0 : kp->appcursor > 0) | 1691 | if (IS_SET(MODE_APPCURSOR) ? kp->appcursor < 0 : kp->appcursor > 0) |
@@ -1742,10 +1754,10 @@ cmessage(XEvent *e) | |||
1742 | */ | 1754 | */ |
1743 | if (e->xclient.message_type == xw.xembed && e->xclient.format == 32) { | 1755 | if (e->xclient.message_type == xw.xembed && e->xclient.format == 32) { |
1744 | if (e->xclient.data.l[1] == XEMBED_FOCUS_IN) { | 1756 | if (e->xclient.data.l[1] == XEMBED_FOCUS_IN) { |
1745 | win.state |= WIN_FOCUSED; | 1757 | win.mode |= MODE_FOCUSED; |
1746 | xseturgency(0); | 1758 | xseturgency(0); |
1747 | } else if (e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { | 1759 | } else if (e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { |
1748 | win.state &= ~WIN_FOCUSED; | 1760 | win.mode &= ~MODE_FOCUSED; |
1749 | } | 1761 | } |
1750 | } else if (e->xclient.data.l[0] == xw.wmdeletewin) { | 1762 | } else if (e->xclient.data.l[0] == xw.wmdeletewin) { |
1751 | /* Send SIGHUP to shell */ | 1763 | /* Send SIGHUP to shell */ |
@@ -1810,7 +1822,7 @@ run(void) | |||
1810 | if (blinktimeout) { | 1822 | if (blinktimeout) { |
1811 | blinkset = tattrset(ATTR_BLINK); | 1823 | blinkset = tattrset(ATTR_BLINK); |
1812 | if (!blinkset) | 1824 | if (!blinkset) |
1813 | MODBIT(term.mode, 0, MODE_BLINK); | 1825 | MODBIT(win.mode, 0, MODE_BLINK); |
1814 | } | 1826 | } |
1815 | } | 1827 | } |
1816 | 1828 | ||
@@ -1825,7 +1837,7 @@ run(void) | |||
1825 | dodraw = 0; | 1837 | dodraw = 0; |
1826 | if (blinktimeout && TIMEDIFF(now, lastblink) > blinktimeout) { | 1838 | if (blinktimeout && TIMEDIFF(now, lastblink) > blinktimeout) { |
1827 | tsetdirtattr(ATTR_BLINK); | 1839 | tsetdirtattr(ATTR_BLINK); |
1828 | term.mode ^= MODE_BLINK; | 1840 | win.mode ^= MODE_BLINK; |
1829 | lastblink = now; | 1841 | lastblink = now; |
1830 | dodraw = 1; | 1842 | dodraw = 1; |
1831 | } | 1843 | } |