JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Make mplayer work again in xrandr.
[spectrwm.git] / scrotwm.c
index c14e854..2dd1d00 100644 (file)
--- 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 */