X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=scrotwm.c;h=2dd1d008eeaa102d24df7a8929af54341e6faafc;hb=1b78470ebd12245145473b5c424f0607db9276fa;hp=c14e854e53c16fd33afff1ac106be4573302ffba;hpb=ea1edcdfb28e8c22d96bcc7057541fb08ab15fc1;p=spectrwm.git diff --git a/scrotwm.c b/scrotwm.c index c14e854..2dd1d00 100644 --- a/scrotwm.c +++ b/scrotwm.c @@ -1688,8 +1688,8 @@ stack_floater(struct ws_win *win, struct swm_region *r) bzero(&wc, sizeof wc); mask = CWX | CWY | CWBorderWidth | CWWidth | CWHeight; - if ((win->quirks & SWM_Q_FULLSCREEN) && (win->g.w == WIDTH(r)) && - (win->g.h == HEIGHT(r))) + if ((win->quirks & SWM_Q_FULLSCREEN) && (win->g.w >= WIDTH(r)) && + (win->g.h >= HEIGHT(r))) wc.border_width = 0; else wc.border_width = 1; @@ -1707,14 +1707,23 @@ stack_floater(struct ws_win *win, struct swm_region *r) wc.y = (HEIGHT(r) - win->g.h) / 2; } + /* XXX need to fix manual moving into a new region */ /* adjust for region */ - wc.x += r->g.x; - wc.y += r->g.y; + if (wc.x < r->g.x) + wc.x += r->g.x; + if (wc.y < r->g.y) + wc.y += r->g.y; - DNPRINTF(SWM_D_STACK, "stack_floater: win %lu x %d y %d w %d h %d\n", + win->g.x = wc.x; + win->g.y = wc.y; + win->g.w = wc.width; + win->g.h = wc.height; + + DNPRINTF(SWM_D_MISC, "stack_floater: win %lu x %d y %d w %d h %d\n", win->id, wc.x, wc.y, wc.width, wc.height); XConfigureWindow(display, win->id, mask, &wc); + configreq_win(win); } /* @@ -2181,7 +2190,7 @@ resize_window(struct ws_win *win, int center) win->id, wc.x, wc.y, wc.width, wc.height); XConfigureWindow(display, win->id, mask, &wc); - config_win(win); + configreq_win(win); } void @@ -2255,7 +2264,7 @@ move_window(struct ws_win *win) win->id, wc.x, wc.y, wc.width, wc.height); XConfigureWindow(display, win->id, mask, &wc); - config_win(win); + configreq_win(win); } void @@ -2311,6 +2320,8 @@ move(struct ws_win *win, union arg *args) /* drain events */ while (XCheckMaskEvent(display, EnterWindowMask, &ev)); + + /* XXX need to fix manual moving into a new region */ } /* key definitions */ @@ -3488,8 +3499,10 @@ manage_window(Window id) !strcmp(win->ch.res_name, quirks[i].name)) { DNPRINTF(SWM_D_CLASS, "found: %s name: %s\n", win->ch.res_class, win->ch.res_name); - if (quirks[i].quirk & SWM_Q_FLOAT) + if (quirks[i].quirk & SWM_Q_FLOAT) { win->floating = 1; + border_me = 1; + } win->quirks = quirks[i].quirk; } } @@ -3678,7 +3691,8 @@ configurerequest(XEvent *e) XWindowChanges wc; if ((win = find_window(ev->window)) == NULL) - new = 1; + if ((win = find_unmanaged_window(ev->window)) == NULL) + new = 1; if (new) { DNPRINTF(SWM_D_EVENT, "configurerequest: new window: %lu\n", @@ -3704,27 +3718,8 @@ configurerequest(XEvent *e) win->g.w = ev->width; if (ev->value_mask & CWHeight) win->g.h = ev->height; - if (win->ws->r != NULL) { - /* this seems to be full screen */ - if (win->g.w >= WIDTH(win->ws->r)) { - win->g.x = 0; - win->g.w = WIDTH(win->ws->r); - ev->value_mask |= CWX | CWWidth; - } - if (win->g.h >= HEIGHT(win->ws->r)) { - /* kill border */ - win->g.y = 0; - win->g.h = HEIGHT(win->ws->r); - ev->value_mask |= CWY | CWHeight; - } - } - XMoveResizeWindow(display, win->id, - win->g.x, win->g.y, win->g.w, win->g.h); - if ((ev->value_mask & (CWX | CWY)) && - !(ev->value_mask & (CWWidth | CWHeight))) - config_win(win); - } else - config_win(win); + } + config_win(win); } } @@ -3767,7 +3762,8 @@ destroynotify(XEvent *e) ws = win->ws; wl = &ws->winlist; - for (w = TAILQ_FIRST(&ws->winlist); w != TAILQ_END(&ws->winlist); w = wn) { + for (w = TAILQ_FIRST(&ws->winlist); w != TAILQ_END(&ws->winlist); + w = wn) { wn = TAILQ_NEXT(w, entry); if (win == w) continue; /* can't happen but oh well */