JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Fix segfault on linux; from nicm
[spectrwm.git] / scrotwm.c
index 7bf77c4..ca2a281 100644 (file)
--- a/scrotwm.c
+++ b/scrotwm.c
@@ -91,6 +91,7 @@
 #endif
 
 /* #define SWM_DEBUG */
+/* #define SWM_DEBUG */
 #ifdef SWM_DEBUG
 #define DPRINTF(x...)          do { if (swm_debug) fprintf(stderr, x); } while(0)
 #define DNPRINTF(n,x...)       do { if (swm_debug & n) fprintf(stderr, x); } while(0)
@@ -194,7 +195,6 @@ struct swm_region {
 }; 
 TAILQ_HEAD(swm_region_list, swm_region);
 
-
 struct ws_win {
        TAILQ_ENTRY(ws_win)     entry;
        Window                  id;
@@ -786,7 +786,6 @@ spawn(struct swm_region *r, union arg *args)
        wait(0);
 }
 
-
 void
 spawnmenu(struct swm_region *r, union arg *args)
 {
@@ -1107,7 +1106,6 @@ stack_floater(struct ws_win *win, struct swm_region *r)
        XConfigureWindow(display, win->id, mask, &wc);
 }
 
-
 void
 vertical_config(struct workspace *ws, int id)
 {
@@ -1200,6 +1198,9 @@ vertical_stack(struct workspace *ws, struct swm_geometry *g) {
                        win->g.h = wc.height = gg.h;
                        mask = CWX | CWY | CWWidth | CWHeight | CWBorderWidth;
                        XConfigureWindow(display, win->id, mask, &wc);
+                       /*
+                       fprintf(stderr, "vertical_stack: win %d x %d y %d w %d h %d bw %d\n", win->id, win->g.x, win->g.y, win->g.w , win->g.h, wc.border_width);
+                       */
                }
 
                XMapRaised(display, win->id);
@@ -1211,7 +1212,6 @@ vertical_stack(struct workspace *ws, struct swm_geometry *g) {
                focus_win(winfocus); /* has to be done outside of the loop */
 }
 
-
 void
 horizontal_config(struct workspace *ws, int id)
 {
@@ -1646,7 +1646,9 @@ manage_window(Window id, struct workspace *ws)
        win->g.h = win->wa.height;
        win->g.x = win->wa.x;
        win->g.y = win->wa.y;
-
+       /*
+       fprintf(stderr, "manage window: %d x %d y %d w %d h %d\n", win->id, win->g.x, win->g.y, win->g.w, win->g.h);
+       */
        /* XXX make this a table */
        bzero(&ch, sizeof ch);
        if (XGetClassHint(display, win->id, &ch)) {
@@ -1673,7 +1675,7 @@ configurerequest(XEvent *e)
 {
        XConfigureRequestEvent  *ev = &e->xconfigurerequest;
        struct ws_win           *win;
-       int                     new = 1;
+       int                     new = 0;
        XWindowChanges          wc;
 
        if ((win = find_window(ev->window)) == NULL)
@@ -1682,6 +1684,10 @@ configurerequest(XEvent *e)
        if (new) {
                DNPRINTF(SWM_D_EVENT, "configurerequest: new window: %lu\n",
                    ev->window);
+               /*
+               fprintf(stderr, "configurerequest: new window: %lu x %d y %d w %d h %d bw %d s %d sm %d\n",
+                   ev->window, ev->x, ev->y, ev->width, ev->height, ev->border_width, ev->above, ev->detail);
+               */
                bzero(&wc, sizeof wc);
                wc.x = ev->x;
                wc.y = ev->y;
@@ -1692,6 +1698,10 @@ configurerequest(XEvent *e)
                wc.stack_mode = ev->detail;
                XConfigureWindow(display, ev->window, ev->value_mask, &wc);
        } else {
+               /*
+               fprintf(stderr, "configurerequest: change window: %lu\n",
+                   ev->window);
+               */
                DNPRINTF(SWM_D_EVENT, "configurerequest: change window: %lu\n",
                    ev->window);
                if (win->floating) {
@@ -2014,7 +2024,7 @@ setup_screens(void)
                else 
                        ncrtc = sr->ncrtc;
 
-               for (c = 0; c < ncrtc; c++) {
+               for (c = 0, ci = NULL; c < ncrtc; c++) {
                        ci = XRRGetCrtcInfo(display, sr, sr->crtcs[c]);
                        if (ci->noutput == 0)
                                continue;
@@ -2028,7 +2038,8 @@ setup_screens(void)
                                    ci->x, ci->y, ci->width, ci->height);
                        w++;
                }
-               XRRFreeCrtcInfo(ci);
+               if (ci)
+                       XRRFreeCrtcInfo(ci);
                XRRFreeScreenResources(sr);
 #else
                new_region(&screens[i], &screens[i].ws[w], 0, 0,