fixed several things, nearly feature complete
7fe717c2
5 file(s) · +35 −29
| 1 | + | - improve mouse based resizals with quadrant approach (then I think we have feature completeness already) |
| 52 | 52 | sel->w = sw - 2 * sel->border; |
|
| 53 | 53 | sel->h = sh - 2 * sel->border; |
|
| 54 | 54 | craise(sel); |
|
| 55 | - | resize(sel); |
|
| 55 | + | resize(sel, False); |
|
| 56 | 56 | discard_events(EnterWindowMask); |
|
| 57 | 57 | } |
|
| 58 | 58 | ||
| 100 | 100 | arrange = floating; |
|
| 101 | 101 | for(c = clients; c; c = c->next) { |
|
| 102 | 102 | if(c->tags[tsel]) |
|
| 103 | - | resize(c); |
|
| 103 | + | resize(c, True); |
|
| 104 | 104 | else |
|
| 105 | 105 | ban_client(c); |
|
| 106 | 106 | } |
|
| 125 | 125 | if(c->tags[tsel]) |
|
| 126 | 126 | n++; |
|
| 127 | 127 | ||
| 128 | - | h = (n > 2) ? sh / (n - 2) : sh; |
|
| 128 | + | h = (n > 1) ? sh / (n - 1) : sh; |
|
| 129 | 129 | ||
| 130 | 130 | for(i = 0, c = clients; c; c = c->next) { |
|
| 131 | 131 | if(c->tags[tsel]) { |
|
| 132 | 132 | if(n == 1) { |
|
| 133 | 133 | c->x = sx; |
|
| 134 | 134 | c->y = sy; |
|
| 135 | - | c->w = sw; |
|
| 136 | - | c->h = sh; |
|
| 135 | + | c->w = sw - 2 * c->border; |
|
| 136 | + | c->h = sh - 2 * c->border; |
|
| 137 | 137 | } |
|
| 138 | - | else if(i == 1) { |
|
| 138 | + | else if(i == 0) { |
|
| 139 | 139 | c->x = sx; |
|
| 140 | 140 | c->y = sy; |
|
| 141 | - | c->w = mw; |
|
| 142 | - | c->h = sh; |
|
| 141 | + | c->w = mw - 2 * c->border; |
|
| 142 | + | c->h = sh - 2 * c->border; |
|
| 143 | 143 | } |
|
| 144 | 144 | else { |
|
| 145 | 145 | c->x = sx + mw; |
|
| 146 | - | c->y = sy + (i - 2) * h; |
|
| 147 | - | c->w = w; |
|
| 148 | - | c->h = h; |
|
| 146 | + | c->y = sy + (i - 1) * h; |
|
| 147 | + | c->w = w - 2 * c->border; |
|
| 148 | + | c->h = h - 2 * c->border; |
|
| 149 | 149 | } |
|
| 150 | - | resize(c); |
|
| 150 | + | resize(c, False); |
|
| 151 | 151 | i++; |
|
| 152 | 152 | } |
|
| 153 | 153 | else |
|
| 304 | 304 | void |
|
| 305 | 305 | focus(Client *c) |
|
| 306 | 306 | { |
|
| 307 | - | if(sel && sel != c) { |
|
| 308 | - | XSetWindowBorder(dpy, sel->win, dc.bg); |
|
| 309 | - | XMapWindow(dpy, sel->title); |
|
| 310 | - | draw_client(sel); |
|
| 311 | - | } |
|
| 307 | + | Client *old = sel; |
|
| 308 | + | ||
| 312 | 309 | sel = c; |
|
| 313 | - | XUnmapWindow(dpy, c->title); |
|
| 314 | - | XSetWindowBorder(dpy, c->win, dc.fg); |
|
| 310 | + | if(old && old != c) |
|
| 311 | + | draw_client(old); |
|
| 315 | 312 | draw_client(c); |
|
| 316 | 313 | XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); |
|
| 317 | 314 | XFlush(dpy); |
|
| 463 | 460 | ||
| 464 | 461 | ||
| 465 | 462 | void |
|
| 466 | - | resize(Client *c) |
|
| 463 | + | resize(Client *c, Bool inc) |
|
| 467 | 464 | { |
|
| 468 | 465 | XConfigureEvent e; |
|
| 469 | 466 | ||
| 470 | - | if(c->incw) |
|
| 471 | - | c->w -= (c->w - c->basew) % c->incw; |
|
| 472 | - | if(c->inch) |
|
| 473 | - | c->h -= (c->h - c->baseh) % c->inch; |
|
| 467 | + | if(inc) { |
|
| 468 | + | if(c->incw) |
|
| 469 | + | c->w -= (c->w - c->basew) % c->incw; |
|
| 470 | + | if(c->inch) |
|
| 471 | + | c->h -= (c->h - c->baseh) % c->inch; |
|
| 472 | + | } |
|
| 474 | 473 | if(c->minw && c->w < c->minw) |
|
| 475 | 474 | c->w = c->minw; |
|
| 476 | 475 | if(c->minh && c->h < c->minh) |
|
| 554 | 553 | draw_client(Client *c) |
|
| 555 | 554 | { |
|
| 556 | 555 | int i; |
|
| 557 | - | if(c == sel) |
|
| 556 | + | if(c == sel) { |
|
| 557 | + | XUnmapWindow(dpy, c->title); |
|
| 558 | + | XSetWindowBorder(dpy, c->win, dc.fg); |
|
| 558 | 559 | return; |
|
| 560 | + | } |
|
| 561 | + | ||
| 562 | + | XSetWindowBorder(dpy, c->win, dc.bg); |
|
| 563 | + | XMapWindow(dpy, c->title); |
|
| 559 | 564 | ||
| 560 | 565 | dc.x = dc.y = 0; |
|
| 561 | 566 | dc.h = c->th; |
|
| 104 | 104 | c->h = abs(ocy - ev.xmotion.y); |
|
| 105 | 105 | c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w; |
|
| 106 | 106 | c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h; |
|
| 107 | - | resize(c); |
|
| 107 | + | resize(c, True); |
|
| 108 | 108 | break; |
|
| 109 | 109 | case ButtonRelease: |
|
| 110 | 110 | XUngrabPointer(dpy, CurrentTime); |
|
| 138 | 138 | XFlush(dpy); |
|
| 139 | 139 | c->x = ocx + (ev.xmotion.x - x1); |
|
| 140 | 140 | c->y = ocy + (ev.xmotion.y - y1); |
|
| 141 | - | resize(c); |
|
| 141 | + | resize(c, False); |
|
| 142 | 142 | break; |
|
| 143 | 143 | case ButtonRelease: |
|
| 144 | 144 | XUngrabPointer(dpy, CurrentTime); |
|
| 106 | 106 | extern void focus(Client *c); |
|
| 107 | 107 | extern void update_name(Client *c); |
|
| 108 | 108 | extern void draw_client(Client *c); |
|
| 109 | - | extern void resize(Client *c); |
|
| 109 | + | extern void resize(Client *c, Bool inc); |
|
| 110 | 110 | extern void update_size(Client *c); |
|
| 111 | 111 | extern Client *gettitle(Window w); |
|
| 112 | 112 | extern void craise(Client *c); |
| 168 | 168 | cleanup() |
|
| 169 | 169 | { |
|
| 170 | 170 | while(sel) { |
|
| 171 | - | resize(sel); |
|
| 171 | + | resize(sel, True); |
|
| 172 | 172 | unmanage(sel); |
|
| 173 | 173 | } |
|
| 174 | 174 | XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); |