Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void
- buttonpress(XEvent *e)
- {
- unsigned int i, x, click;
- Arg arg = {0};
- Client *c;
- Monitor *m;
- XButtonPressedEvent *ev = &e->xbutton;
- char *text, *s, ch;
- click = ClkRootWin;
- /* focus monitor if necessary */
- if ((m = wintomon(ev->window)) && m != selmon) {
- unfocus(selmon->sel, 1);
- selmon = m;
- focus(NULL);
- }
- if (ev->window == selmon->barwin) {
- i = x = 0;
- unsigned int occ = 0;
- for(c = m->clients; c; c=c->next)
- occ |= c->tags == TAGMASK ? 0 : c->tags;
- do {
- /* Do not reserve space for vacant tags */
- if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
- continue;
- x += TEXTW(tags[i]);
- } while (ev->x >= x && ++i < LENGTH(tags));
- if (i < LENGTH(tags)) {
- click = ClkTagBar;
- arg.ui = 1 << i;
- } else if (ev->x < x + TEXTW(selmon->ltsymbol))
- click = ClkLtSymbol;
- /* 2px right padding */
- //else if (ev->x > selmon->ww - TEXTW(stext) + lrpad - 2)
- else if (ev->x > selmon->ww - statusw) {
- x = selmon->ww - statusw;
- click = ClkStatusText;
- statussig = 0;
- for (text = s = stext; *s && x <= ev->x; s++) {
- if ((unsigned char)(*s) < ' ') {
- ch = *s;
- *s = '\0';
- x += TEXTW(text) - lrpad;
- *s = ch;
- text = s + 1;
- if (x >= ev->x)
- break;
- /* reset on matching signal raw byte */
- if (ch == statussig)
- statussig = 0;
- else
- statussig = ch;
- }
- }
- }
- else {
- x += TEXTW(selmon->ltsymbol);
- c = m->clients;
- if (c) {
- do {
- if (!ISVISIBLE(c))
- continue;
- else
- x +=(1.0 / (double)m->bt) * m->btw;
- } while (ev->x > x && (c = c->next));
- click = ClkWinTitle;
- arg.v = c;
- }
- }
- } else if ((c = wintoclient(ev->window))) {
- focus(c);
- restack(selmon);
- XAllowEvents(dpy, ReplayPointer, CurrentTime);
- click = ClkClientWin;
- }
- for (i = 0; i < LENGTH(buttons); i++)
- if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
- && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
- buttons[i].func((click == ClkTagBar || click == ClkWinTitle) && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement