Advertisement
Guest User

Untitled

a guest
Mar 12th, 2012
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.63 KB | None | 0 0
  1. --- dwm.c.orig 2012-03-12 21:32:42.245999322 +0100
  2. +++ src/dwm-6.0/dwm.c 2012-03-12 21:32:17.512666559 +0100
  3. @@ -142,9 +141,19 @@
  4. Monitor *next;
  5. Window barwin;
  6. const Layout *lt[2];
  7. + int curtag;
  8. + int prevtag;
  9. + const Layout **lts;
  10. + double *mfacts;
  11. };
  12.  
  13. typedef struct {
  14. + const char *name;
  15. + const Layout *layout;
  16. + float mfact;
  17. +} Tag;
  18. +
  19. +typedef struct {
  20. const char *class;
  21. const char *instance;
  22. const char *title;
  23. @@ -439,9 +449,9 @@
  24. }
  25. if(ev->window == selmon->barwin) {
  26. i = x = 0;
  27. - do
  28. - x += TEXTW(tags[i]);
  29. - while(ev->x >= x && ++i < LENGTH(tags));
  30. + do {
  31. + x += TEXTW(tags[i].name);
  32. + } while(ev->x >= x && ++i < LENGTH(tags));
  33. if(i < LENGTH(tags)) {
  34. click = ClkTagBar;
  35. arg.ui = 1 << i;
  36. @@ -512,6 +522,8 @@
  37. }
  38. XUnmapWindow(dpy, mon->barwin);
  39. XDestroyWindow(dpy, mon->barwin);
  40. + free(mon->mfacts);
  41. + free(mon->lts);
  42. free(mon);
  43. }
  44.  
  45. @@ -642,19 +654,29 @@
  46. XSync(dpy, False);
  47. }
  48.  
  49. +/* TODO Check how many times createmon is called */
  50. Monitor *
  51. createmon(void) {
  52. Monitor *m;
  53. + int i, numtags = LENGTH(tags) + 1;
  54.  
  55. if(!(m = (Monitor *)calloc(1, sizeof(Monitor))))
  56. die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
  57. + if(!(m->mfacts = calloc(sizeof(double), numtags)))
  58. + die("fatal: could not malloc() %u bytes\n", sizeof(double) * numtags);
  59. + if(!(m->lts = calloc(sizeof(Layout *), numtags)))
  60. + die("fatal: could not malloc() %u bytes\n", sizeof(Layout *) * numtags);
  61. m->tagset[0] = m->tagset[1] = 1;
  62. - m->mfact = mfact;
  63. m->showbar = showbar;
  64. m->topbar = topbar;
  65. - m->lt[0] = &layouts[0];
  66. + m->curtag = m->prevtag = 1;
  67. + for(i = 1; i < numtags; i++) {
  68. + m->mfacts[i] = tags[i - 1].mfact < 0 ? mfact : tags[i - 1].mfact;
  69. + m->lts[i] = tags[i - 1].layout;
  70. + }
  71. + m->lt[0] = m->lts[m->curtag];
  72. m->lt[1] = &layouts[1 % LENGTH(layouts)];
  73. - strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
  74. + strncpy(m->ltsymbol, m->lt[0]->symbol, sizeof m->ltsymbol);
  75. return m;
  76. }
  77.  
  78. @@ -727,9 +749,9 @@
  79. }
  80. dc.x = 0;
  81. for(i = 0; i < LENGTH(tags); i++) {
  82. - dc.w = TEXTW(tags[i]);
  83. + dc.w = TEXTW(tags[i].name);
  84. col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
  85. - drawtext(tags[i], col, urg & 1 << i);
  86. + drawtext(tags[i].name, col, urg & 1 << i);
  87. drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
  88. occ & 1 << i, urg & 1 << i, col);
  89. dc.x += dc.w;
  90. @@ -1556,7 +1578,7 @@
  91. if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
  92. selmon->sellt ^= 1;
  93. if(arg && arg->v)
  94. - selmon->lt[selmon->sellt] = (Layout *)arg->v;
  95. + selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
  96. strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
  97. if(selmon->sel)
  98. arrange(selmon);
  99. @@ -1571,10 +1593,10 @@
  100.  
  101. if(!arg || !selmon->lt[selmon->sellt]->arrange)
  102. return;
  103. - f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
  104. + f = arg->f < 1.0 ? arg->f + selmon->mfacts[selmon->curtag] : arg->f - 1.0;
  105. if(f < 0.1 || f > 0.9)
  106. return;
  107. - selmon->mfact = f;
  108. + selmon->mfacts[selmon->curtag] = f;
  109. arrange(selmon);
  110. }
  111.  
  112. @@ -1751,13 +1773,24 @@
  113. void
  114. toggletag(const Arg *arg) {
  115. unsigned int newtags;
  116. -
  117. + unsigned int i;
  118. +
  119. if(!selmon->sel)
  120. return;
  121. newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
  122. if(newtags) {
  123. selmon->sel->tags = newtags;
  124. - focus(NULL);
  125. + if(newtags == ~0) {
  126. + selmon->prevtag = selmon->curtag;
  127. + selmon->curtag = 0;
  128. + }
  129. + if(!(newtags & 1 << (selmon->curtag - 1))) {
  130. + selmon->prevtag = selmon->curtag;
  131. + for (i=0; !(newtags & 1 << i); i++);
  132. + selmon->curtag = i + 1;
  133. + }
  134. + selmon->sel->tags = newtags;
  135. + selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
  136. arrange(selmon);
  137. }
  138. }
  139. @@ -2045,12 +2078,26 @@
  140.  
  141. void
  142. view(const Arg *arg) {
  143. + unsigned int i;
  144. +
  145. if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
  146. return;
  147. selmon->seltags ^= 1; /* toggle sel tagset */
  148. - if(arg->ui & TAGMASK)
  149. + if(arg->ui & TAGMASK) {
  150. selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
  151. - focus(NULL);
  152. + selmon->prevtag = selmon->curtag;
  153. + if(arg->ui == ~0)
  154. + selmon->curtag = 0;
  155. + else {
  156. + for (i=0; !(arg->ui & 1 << i); i++);
  157. + selmon->curtag = i + 1;
  158. + }
  159. + } else {
  160. + selmon->prevtag= selmon->curtag ^ selmon->prevtag;
  161. + selmon->curtag^= selmon->prevtag;
  162. + selmon->prevtag= selmon->curtag ^ selmon->prevtag;
  163. + }
  164. + selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
  165. arrange(selmon);
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement