JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Reformat CONFIGURATION FILES section for better readability.
[spectrwm.git] / scrotwm.c
index 44b614c..9beaa18 100644 (file)
--- a/scrotwm.c
+++ b/scrotwm.c
@@ -1159,16 +1159,16 @@ setscreencolor(char *val, int i, int c)
                screens[i - 1].c[c].color = name_to_color(val);
                free(screens[i - 1].c[c].name);
                if ((screens[i - 1].c[c].name = strdup(val)) == NULL)
-                       errx(1, "strdup");
+                       err(1, "strdup");
        } else if (i == -1) {
                for (i = 0; i < ScreenCount(display); i++) {
                        screens[i].c[c].color = name_to_color(val);
                        free(screens[i].c[c].name);
                        if ((screens[i].c[c].name = strdup(val)) == NULL)
-                               errx(1, "strdup");
+                               err(1, "strdup");
                }
        } else
-               errx(1, "invalid screen index: %d out of bounds (maximum %d)\n",
+               errx(1, "invalid screen index: %d out of bounds (maximum %d)",
                    i, ScreenCount(display));
 }
 
@@ -1201,14 +1201,14 @@ custom_region(char *val)
 
        if (sscanf(val, "screen[%u]:%ux%u+%u+%u", &sidx, &w, &h, &x, &y) != 5)
                errx(1, "invalid custom region, "
-                   "should be 'screen[<n>]:<n>x<n>+<n>+<n>\n");
+                   "should be 'screen[<n>]:<n>x<n>+<n>+<n>");
        if (sidx < 1 || sidx > ScreenCount(display))
-               errx(1, "invalid screen index: %d out of bounds (maximum %d)\n",
+               errx(1, "invalid screen index: %d out of bounds (maximum %d)",
                    sidx, ScreenCount(display));
        sidx--;
 
        if (w < 1 || h < 1)
-               errx(1, "region %ux%u+%u+%u too small\n", w, h, x, y);
+               errx(1, "region %ux%u+%u+%u too small", w, h, x, y);
 
        if (x > DisplayWidth(display, sidx) ||
            y > DisplayHeight(display, sidx) ||
@@ -1475,9 +1475,9 @@ bar_refresh(void)
                socket_setnonblock(bar_pipe[0]);
                socket_setnonblock(bar_pipe[1]); /* XXX hmmm, really? */
                if (dup2(bar_pipe[0], 0) == -1)
-                       errx(1, "dup2");
+                       err(1, "dup2");
                if (dup2(bar_pipe[1], 1) == -1)
-                       errx(1, "dup2");
+                       err(1, "dup2");
                if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
                        err(1, "could not disable SIGPIPE");
                switch (bar_pid = fork()) {
@@ -1526,7 +1526,7 @@ bar_setup(struct swm_region *r)
                }
        }
        if (bar_fonts[i] == NULL)
-                       errx(1, "couldn't load font");
+               errx(1, "couldn't load font");
        if (bar_fs == NULL)
                errx(1, "couldn't create font structure");
 
@@ -1762,7 +1762,7 @@ restart(struct swm_region *r, union arg *args)
        /* disable alarm because the following code may not be interrupted */
        alarm(0);
        if (signal(SIGALRM, SIG_IGN) == SIG_ERR)
-               errx(1, "can't disable alarm");
+               err(1, "can't disable alarm");
 
        bar_extra_stop();
        bar_extra = 1;
@@ -1945,12 +1945,12 @@ validate_win(struct ws_win *testwin)
        struct ws_win           *win;
        struct workspace        *ws;
        struct swm_region       *r;
-       int                     i, x, foundit = 0;
+       int                     i, x;
 
        if (testwin == NULL)
                return (0);
 
-       for (i = 0, foundit = 0; i < ScreenCount(display); i++)
+       for (i = 0; i < ScreenCount(display); i++)
                TAILQ_FOREACH(r, &screens[i].rl, entry)
                        for (x = 0; x < SWM_WS_MAX; x++) {
                                ws = &r->s->ws[x];
@@ -1966,10 +1966,10 @@ validate_ws(struct workspace *testws)
 {
        struct swm_region       *r;
        struct workspace        *ws;
-       int                     foundit, i, x;
+       int                     i, x;
 
        /* validate all ws */
-       for (i = 0, foundit = 0; i < ScreenCount(display); i++)
+       for (i = 0; i < ScreenCount(display); i++)
                TAILQ_FOREACH(r, &screens[i].rl, entry)
                        for (x = 0; x < SWM_WS_MAX; x++) {
                                ws = &r->s->ws[x];
@@ -2428,8 +2428,13 @@ focus_prev(struct ws_win *win)
        if (winfocus == NULL || winfocus == win)
                winfocus = TAILQ_NEXT(cur_focus, entry);
 done:
-       if (winfocus == winlostfocus || winfocus == NULL)
+       if (winfocus == winlostfocus || winfocus == NULL) {
+               /* update the bar so that title/class/name will be cleared. */
+               if (window_name_enabled || title_name_enabled || title_class_enabled)
+                       bar_update();
+               
                return;
+       }
 
        focus_magic(winfocus);
 }
@@ -2513,8 +2518,13 @@ focus(struct swm_region *r, union arg *args)
        default:
                return;
        }
-       if (winfocus == winlostfocus || winfocus == NULL)
+       if (winfocus == winlostfocus || winfocus == NULL) {
+               /* update the bar so that title/class/name will be cleared. */
+               if (window_name_enabled || title_name_enabled || title_class_enabled)
+                       bar_update();
+
                return;
+       }
 
        focus_magic(winfocus);
 }
@@ -2523,13 +2533,10 @@ void
 cycle_layout(struct swm_region *r, union arg *args)
 {
        struct workspace        *ws = r->ws;
-       struct ws_win           *winfocus;
        union arg               a;
 
        DNPRINTF(SWM_D_EVENT, "cycle_layout: workspace: %d\n", ws->idx);
 
-       winfocus = ws->focus;
-
        ws->cur_layout++;
        if (ws->cur_layout->l_stack == NULL)
                ws->cur_layout = &layouts[0];
@@ -3266,14 +3273,11 @@ uniconify(struct swm_region *r, union arg *args)
 void
 name_workspace(struct swm_region *r, union arg *args)
 {
-       struct workspace        *ws;
        FILE                    *lfile;
 
        DNPRINTF(SWM_D_MISC, "name_workspace\n");
 
-       if (r && r->ws)
-               ws = r->ws;
-       else
+       if (r == NULL)
                return;
 
        search_r = r;
@@ -3820,9 +3824,7 @@ move_window(struct ws_win *win)
 {
        unsigned int            mask;
        XWindowChanges          wc;
-       struct swm_region       *r;
 
-       r = root_to_region(win->wa.root);
        bzero(&wc, sizeof wc);
        mask = CWX | CWY;
        wc.x = win->g.x;
@@ -4296,9 +4298,9 @@ spawn_select(struct swm_region *r, union arg *args, char *spawn_name, int *pid)
                break;
        case 0: /* child */
                if (dup2(select_list_pipe[0], 0) == -1)
-                       errx(1, "dup2");
+                       err(1, "dup2");
                if (dup2(select_resp_pipe[1], 1) == -1)
-                       errx(1, "dup2");
+                       err(1, "dup2");
                close(select_list_pipe[1]);
                close(select_resp_pipe[0]);
                spawn(r->ws->idx, &a, 0);
@@ -5081,7 +5083,7 @@ setconfvalue(char *selector, char *value, int flags)
                else if (!strcmp(value, "synergy"))
                        focus_mode = SWM_FOCUS_SYNERGY;
                else
-                       err(1, "focus_mode");
+                       errx(1, "focus_mode");
                break;
        case SWM_S_DISABLE_BORDER:
                disable_border = atoi(value);
@@ -5172,10 +5174,10 @@ setautorun(char *selector, char *value, int flags)
 
        bzero(s, sizeof s);
        if (sscanf(value, "ws[%d]:%1023c", &ws_id, s) != 2)
-               errx(1, "invalid autorun entry, should be 'ws[<idx>]:command'\n");
+               errx(1, "invalid autorun entry, should be 'ws[<idx>]:command'");
        ws_id--;
        if (ws_id < 0 || ws_id >= SWM_WS_MAX)
-               errx(1, "autorun: invalid workspace %d\n", ws_id + 1);
+               errx(1, "autorun: invalid workspace %d", ws_id + 1);
 
        /*
         * This is a little intricate
@@ -5237,10 +5239,10 @@ setlayout(char *selector, char *value, int flags)
            &ws_id, &mg, &ma, &si, &raise, s) != 6)
                errx(1, "invalid layout entry, should be 'ws[<idx>]:"
                    "<master_grow>:<master_add>:<stack_inc>:<always_raise>:"
-                   "<type>'\n");
+                   "<type>'");
        ws_id--;
        if (ws_id < 0 || ws_id >= SWM_WS_MAX)
-               errx(1, "layout: invalid workspace %d\n", ws_id + 1);
+               errx(1, "layout: invalid workspace %d", ws_id + 1);
 
        if (!strcasecmp(s, "vertical"))
                st = SWM_V_STACK;
@@ -5251,7 +5253,7 @@ setlayout(char *selector, char *value, int flags)
        else
                errx(1, "invalid layout entry, should be 'ws[<idx>]:"
                    "<master_grow>:<master_add>:<stack_inc>:<always_raise>:"
-                   "<type>'\n");
+                   "<type>'");
 
        for (i = 0; i < ScreenCount(display); i++) {
                ws = (struct workspace *)&screens[i].ws;
@@ -5567,7 +5569,7 @@ manage_window(Window id)
        }
 
        if ((win = calloc(1, sizeof(struct ws_win))) == NULL)
-               errx(1, "calloc: failed to allocate memory for new window");
+               err(1, "calloc: failed to allocate memory for new window");
 
        win->id = id;
 
@@ -6192,8 +6194,8 @@ propertynotify(XEvent *e)
        }
 
        switch (ev->atom) {
-       case XA_WM_NORMAL_HINTS:
 #if 0
+       case XA_WM_NORMAL_HINTS:
                long            mask;
                XGetWMNormalHints(display, win->id, &win->sh, &mask);
                fprintf(stderr, "normal hints: flag 0x%x\n", win->sh.flags);
@@ -6205,6 +6207,11 @@ propertynotify(XEvent *e)
                XMoveResizeWindow(display, win->id,
                    win->g.x, win->g.y, win->g.w, win->g.h);
 #endif
+       case XA_WM_CLASS:
+               if (title_name_enabled || title_class_enabled)
+                       bar_update();
+               break;
+       case XA_WM_NAME:
                if (window_name_enabled)
                        bar_update();
                break;
@@ -6399,7 +6406,7 @@ new_region(struct swm_screen *s, int x, int y, int w, int h)
                        ws = r->ws;
        } else
                if ((r = calloc(1, sizeof(struct swm_region))) == NULL)
-                       errx(1, "calloc: failed to allocate memory for screen");
+                       err(1, "calloc: failed to allocate memory for screen");
 
        /* if we don't have a workspace already, find one */
        if (ws == NULL) {
@@ -6411,7 +6418,7 @@ new_region(struct swm_screen *s, int x, int y, int w, int h)
        }
 
        if (ws == NULL)
-               errx(1, "no free workspaces\n");
+               errx(1, "no free workspaces");
 
        X(r) = x;
        Y(r) = y;
@@ -6500,7 +6507,7 @@ screenchange(XEvent *e) {
                if (screens[i].root == xe->root)
                        break;
        if (i >= ScreenCount(display))
-               errx(1, "screenchange: screen not found\n");
+               errx(1, "screenchange: screen not found");
 
        /* brute force for now, just re-enumerate the regions */
        scan_xrandr(i);
@@ -6568,7 +6575,7 @@ setup_screens(void)
 
        if ((screens = calloc(ScreenCount(display),
             sizeof(struct swm_screen))) == NULL)
-               errx(1, "calloc: screens");
+               err(1, "calloc: screens");
 
        /* initial Xrandr setup */
        xrandr_support = XRRQueryExtension(display,
@@ -6639,7 +6646,7 @@ setup_globals(void)
        if ((spawn_term[0] = strdup("xterm")) == NULL)
                err(1, "setup_globals: strdup");
        if ((clock_format = strdup("%a %b %d %R %Z %Y")) == NULL)
-               errx(1, "strdup");
+               err(1, "strdup");
 }
 
 void