Advertisement
Guest User

func

a guest
Feb 15th, 2025
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1.  
  2. void
  3. buttonpress(XEvent *e)
  4. {
  5. unsigned int i, x, click;
  6. Arg arg = {0};
  7. Client *c;
  8. Monitor *m;
  9. XButtonPressedEvent *ev = &e->xbutton;
  10. char *text, *s, ch;
  11. click = ClkRootWin;
  12. /* focus monitor if necessary */
  13. if ((m = wintomon(ev->window)) && m != selmon) {
  14. unfocus(selmon->sel, 1);
  15. selmon = m;
  16. focus(NULL);
  17. }
  18. if (ev->window == selmon->barwin) {
  19. i = x = 0;
  20. unsigned int occ = 0;
  21. for(c = m->clients; c; c=c->next)
  22. occ |= c->tags == TAGMASK ? 0 : c->tags;
  23. do {
  24. /* Do not reserve space for vacant tags */
  25. if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
  26. continue;
  27. x += TEXTW(tags[i]);
  28. } while (ev->x >= x && ++i < LENGTH(tags));
  29. if (i < LENGTH(tags)) {
  30. click = ClkTagBar;
  31. arg.ui = 1 << i;
  32. } else if (ev->x < x + TEXTW(selmon->ltsymbol))
  33. click = ClkLtSymbol;
  34. /* 2px right padding */
  35. //else if (ev->x > selmon->ww - TEXTW(stext) + lrpad - 2)
  36. else if (ev->x > selmon->ww - statusw) {
  37. x = selmon->ww - statusw;
  38. click = ClkStatusText;
  39. statussig = 0;
  40. for (text = s = stext; *s && x <= ev->x; s++) {
  41. if ((unsigned char)(*s) < ' ') {
  42. ch = *s;
  43. *s = '\0';
  44. x += TEXTW(text) - lrpad;
  45. *s = ch;
  46. text = s + 1;
  47. if (x >= ev->x)
  48. break;
  49. /* reset on matching signal raw byte */
  50. if (ch == statussig)
  51. statussig = 0;
  52. else
  53. statussig = ch;
  54. }
  55. }
  56. }
  57. else {
  58. x += TEXTW(selmon->ltsymbol);
  59. c = m->clients;
  60.  
  61. if (c) {
  62. do {
  63. if (!ISVISIBLE(c))
  64. continue;
  65. else
  66. x +=(1.0 / (double)m->bt) * m->btw;
  67. } while (ev->x > x && (c = c->next));
  68.  
  69. click = ClkWinTitle;
  70. arg.v = c;
  71. }
  72. }
  73. } else if ((c = wintoclient(ev->window))) {
  74. focus(c);
  75. restack(selmon);
  76. XAllowEvents(dpy, ReplayPointer, CurrentTime);
  77. click = ClkClientWin;
  78. }
  79. for (i = 0; i < LENGTH(buttons); i++)
  80. if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
  81. && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
  82. buttons[i].func((click == ClkTagBar || click == ClkWinTitle) && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
  83. }
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement