549 } |
549 } |
550 } |
550 } |
551 |
551 |
552 void |
552 void |
553 drawtext(const char *text, ulong col[ColLast], Bool invert) { |
553 drawtext(const char *text, ulong col[ColLast], Bool invert) { |
554 int i, x, y, h; |
554 int i, x, y, h, len, olen; |
555 uint len, olen; |
|
556 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; |
555 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; |
557 char buf[256]; |
556 char buf[256]; |
558 |
557 |
559 XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]); |
558 XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]); |
560 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); |
559 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); |
610 drawbar(); |
609 drawbar(); |
611 } |
610 } |
612 |
611 |
613 void |
612 void |
614 focus(Client *c) { |
613 focus(Client *c) { |
615 if(!c || (c && c->isbanned)) |
614 if(!c || c->isbanned) |
616 for(c = stack; c && c->isbanned; c = c->snext); |
615 for(c = stack; c && c->isbanned; c = c->snext); |
617 if(sel && sel != c) { |
616 if(sel && sel != c) { |
618 grabbuttons(sel, False); |
617 grabbuttons(sel, False); |
619 XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]); |
618 XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]); |
620 } |
619 } |
621 if(c) { |
620 if(c) { |
622 detachstack(c); |
621 detachstack(c); |
623 attachstack(c); |
622 attachstack(c); |
624 grabbuttons(c, True); |
623 grabbuttons(c, True); |
625 } |
|
626 sel = c; |
|
627 if(c) { |
|
628 XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]); |
624 XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]); |
629 XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); |
625 XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); |
630 } |
626 } |
631 else |
627 else |
632 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); |
628 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); |
|
629 sel = c; |
633 drawbar(); |
630 drawbar(); |
634 } |
631 } |
635 |
632 |
636 void |
633 void |
637 focusin(XEvent *e) { /* there are some broken focus acquiring clients */ |
634 focusin(XEvent *e) { /* there are some broken focus acquiring clients */ |
1563 XMoveResizeWindow(dpy, barwin, wx, by, ww, bh); |
1560 XMoveResizeWindow(dpy, barwin, wx, by, ww, bh); |
1564 } |
1561 } |
1565 |
1562 |
1566 void |
1563 void |
1567 updategeom(void) { |
1564 updategeom(void) { |
|
1565 #ifdef XINERAMA |
1568 int i; |
1566 int i; |
1569 #ifdef XINERAMA |
|
1570 XineramaScreenInfo *info = NULL; |
1567 XineramaScreenInfo *info = NULL; |
1571 |
1568 |
1572 /* window area geometry */ |
1569 /* window area geometry */ |
1573 if(XineramaIsActive(dpy)) { |
1570 if(XineramaIsActive(dpy)) { |
1574 info = XineramaQueryScreens(dpy, &i); |
1571 info = XineramaQueryScreens(dpy, &i); |