X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=dwm.c;h=7cc4ea79f3d81980e7dd75d44d1b296b34f6ac70;hp=f842b419221e698e6ba0bac919b4f3b74bb9a990;hb=69e7d7dfd3b07431bf5e5c6e4814665529554031;hpb=867ba360300682859ab963222ec0a3f42586ff54 diff --git a/dwm.c b/dwm.c index f842b41..7cc4ea7 100644 --- a/dwm.c +++ b/dwm.c @@ -529,7 +529,7 @@ clientmessage(XEvent *e) { if(!c) return; if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]) { - if(cme->data.l[0]) { + if(cme->data.l[0] && !c->isfullscreen) { XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32, PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); c->isfullscreen = True; @@ -615,18 +615,26 @@ configurerequest(XEvent *e) { c->bw = ev->border_width; else if(c->isfloating || !selmon->lt[selmon->sellt]->arrange) { m = c->mon; - if(ev->value_mask & CWX) + if(ev->value_mask & CWX) { + c->oldx = c->x; c->x = m->mx + ev->x; - if(ev->value_mask & CWY) + } + if(ev->value_mask & CWY) { + c->oldy = c->y; c->y = m->my + ev->y; - if(ev->value_mask & CWWidth) + } + if(ev->value_mask & CWWidth) { + c->oldw = c->w; c->w = ev->width; - if(ev->value_mask & CWHeight) + } + if(ev->value_mask & CWHeight) { + c->oldh = c->h; c->h = ev->height; + } if((c->x + c->w) > m->mx + m->mw && c->isfloating) - c->x = m->mx + (m->mw / 2 - c->w / 2); /* center in x direction */ + c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */ if((c->y + c->h) > m->my + m->mh && c->isfloating) - c->y = m->my + (m->mh / 2 - c->h / 2); /* center in y direction */ + c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */ if((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight))) configure(c); if(ISVISIBLE(c)) @@ -827,13 +835,14 @@ enternotify(XEvent *e) { if((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root) return; c = wintoclient(ev->window); - if((m = wintomon(ev->window)) && m != selmon) { + m = c ? c->mon : wintomon(ev->window); + if(m != selmon) { unfocus(selmon->sel, True); selmon = m; } - else if(c == selmon->sel || c == NULL) + else if(!c || c == selmon->sel) return; - focus((wintoclient(ev->window))); + focus(c); } void @@ -1112,13 +1121,13 @@ manage(Window w, XWindowAttributes *wa) { applyrules(c); } /* geometry */ - c->x = c->oldx = wa->x + c->mon->wx; - c->y = c->oldy = wa->y + c->mon->wy; + c->x = c->oldx = wa->x; + c->y = c->oldy = wa->y; c->w = c->oldw = wa->width; c->h = c->oldh = wa->height; c->oldbw = wa->border_width; if(c->w == c->mon->mw && c->h == c->mon->mh) { - c->isfloating = True; + c->isfloating = True; // regression with flash, XXXX c->x = c->mon->mx; c->y = c->mon->my; c->bw = 0; @@ -1654,9 +1663,9 @@ tile(Monitor *m) { if(--n == 0) return; /* tile stack */ - x = (m->wx + mw > c->x + c->w) ? c->x + c->w + 2 * c->bw : m->wx + mw; + x = (m->wx > c->x) ? c->x + mw + 2 * c->bw : m->wx + mw; y = m->wy; - w = (m->wx + mw > c->x + c->w) ? m->wx + m->ww - x : m->ww - mw; + w = (m->wx > c->x) ? m->wx + m->ww - x : m->ww - mw; h = m->wh / n; if(h < bh) h = m->wh;