JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Make mplayer work again in xrandr.
[spectrwm.git] / scrotwm.c
index 22d92b0..2dd1d00 100644 (file)
--- a/scrotwm.c
+++ b/scrotwm.c
@@ -52,7 +52,7 @@
 
 static const char      *cvstag = "$scrotwm$";
 
-#define        SWM_VERSION     "0.9.13"
+#define        SWM_VERSION     "0.9.14"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -1350,14 +1350,8 @@ switchws(struct swm_region *r, union arg *args)
        struct ws_win           *win, *winfocus = NULL, *parent = NULL;
        struct workspace        *new_ws, *old_ws;
 
-       if (!(r && r->s)) {
-               fprintf(stderr, "r && r->s failed\n");
-               abort();
-       }
-       if (wsid < 0 || wsid > SWM_WS_MAX) {
-               fprintf(stderr, "illegal wsid\n");
-               abort();
-       }
+       if (!(r && r->s))
+               return;
 
        this_r = r;
        old_ws = this_r->ws;
@@ -1367,11 +1361,8 @@ switchws(struct swm_region *r, union arg *args)
            "%d -> %d\n", r->s->idx, WIDTH(r), HEIGHT(r), X(r), Y(r),
            old_ws->idx, wsid);
 
-       if (new_ws == NULL || old_ws == NULL) {
-               fprintf(stderr, "new_ws = %p old_ws = %p\n", new_ws, old_ws);
-               abort();
-       }
-
+       if (new_ws == NULL || old_ws == NULL)
+               return;
        if (new_ws == old_ws)
                return;
 
@@ -1672,10 +1663,6 @@ stack(void) {
                            "(screen %d, region %d)\n", r->ws->idx, i, j++);
 
                        /* start with screen geometry, adjust for bar */
-                       if (r == NULL) {
-                               fprintf(stderr, "illegal r\n");
-                               abort();
-                       }
                        g = r->g;
                        g.w -= 2;
                        g.h -= 2;
@@ -1683,18 +1670,6 @@ stack(void) {
                                g.y += bar_height;
                                g.h -= bar_height;
                        }
-                       if (r->ws == NULL) {
-                               fprintf(stderr, "illegal ws\n");
-                               abort();
-                       }
-                       if (r->ws->cur_layout == NULL) {
-                               fprintf(stderr, "illegal cur_layout\n");
-                               abort();
-                       }
-                       if (r->ws->cur_layout->l_stack == NULL) {
-                               fprintf(stderr, "illegal l_stack\n");
-                               abort();
-                       }
                        r->ws->cur_layout->l_stack(r->ws, &g);
                }
        }
@@ -1713,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;
@@ -1732,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);
 }
 
 /*
@@ -2206,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
@@ -2280,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
@@ -2336,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 */
@@ -3513,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;
                        }
                }
@@ -3703,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",
@@ -3729,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);
        }
 }
 
@@ -3792,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 */