JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Fix quirk matching of windows missing WM_CLASS.
[spectrwm.git] / spectrwm.c
index 34a49be..9d08e6e 100644 (file)
@@ -6398,6 +6398,9 @@ setconfspawn(const char *selector, const char *value, int flags)
 {
        char            *args;
 
+       if (selector == NULL || strlen(selector) == 0)
+               return (1);
+
        args = expand_tilde(value);
 
        DNPRINTF(SWM_D_SPAWN, "setconfspawn: [%s] [%s]\n", selector, args);
@@ -6646,8 +6649,9 @@ setconfbinding(const char *selector, const char *value, int flags)
        /* suppress unused warning since var is needed */
        (void)flags;
 
-       DNPRINTF(SWM_D_KEY, "setconfbinding: enter\n");
-       if (selector == NULL) {
+       DNPRINTF(SWM_D_KEY, "setconfbinding: enter selector: [%s], "
+           "value: [%s]\n", selector, value);
+       if (selector == NULL || strlen(selector) == 0) {
                DNPRINTF(SWM_D_KEY, "setconfbinding: unbind %s\n", value);
                if (parsekeys(value, mod_key, &mod, &ks) == 0) {
                        kfid = KF_INVALID;
@@ -7164,7 +7168,7 @@ setconfquirk(const char *selector, const char *value, int flags)
        /* suppress unused warning since var is needed */
        (void)flags;
 
-       if (selector == NULL)
+       if (selector == NULL || strlen(selector) == 0)
                return (0);
 
        if ((str = strdup(selector)) == NULL)
@@ -7277,9 +7281,6 @@ setconfvalue(const char *selector, const char *value, int flags)
        int                     i, ws_id, num_screens;
        char                    *b, *str;
 
-       /* suppress unused warning since var is needed */
-       (void)selector;
-
        switch (flags) {
        case SWM_S_BAR_ACTION:
                free(bar_argv[0]);
@@ -7519,7 +7520,9 @@ setconfmodkey(const char *selector, const char *value, int flags)
 int
 setconfcolor(const char *selector, const char *value, int flags)
 {
-       setscreencolor(value, ((selector == NULL)?-1:atoi(selector)), flags);
+       setscreencolor(value,
+           (selector == NULL || strlen(selector) == 0) ? -1 : atoi(selector),
+           flags);
        return (0);
 }
 
@@ -8032,7 +8035,7 @@ manage_window(xcb_window_t id, uint16_t mapped)
        struct ws_win           *win, *ww;
        int                     ws_idx;
        char                    ws_idx_str[SWM_PROPLEN];
-       char                    *name;
+       char                    *class, *instance, *name;
        struct swm_region       *r;
        struct pid_e            *p;
        struct quirk            *qp;
@@ -8158,40 +8161,38 @@ manage_window(xcb_window_t id, uint16_t mapped)
        ewmh_autoquirk(win);
 
        /* Determine initial quirks. */
-       if (xcb_icccm_get_wm_class_reply(conn,
+       xcb_icccm_get_wm_class_reply(conn,
            xcb_icccm_get_wm_class(conn, win->id),
-           &win->ch, NULL)) {
-               name = get_win_name(win->id);
+           &win->ch, NULL);
 
-               DNPRINTF(SWM_D_CLASS, "manage_window: class: %s, instance: %s, "
-                   "name: %s\n",
-                   win->ch.class_name, win->ch.instance_name, name);
-
-               /* java is retarded so treat it special */
-               if (strstr(win->ch.instance_name, "sun-awt")) {
-                       DNPRINTF(SWM_D_CLASS, "manage_window: java window "
-                           "detected.\n");
-                       win->java = 1;
-               }
-
-               TAILQ_FOREACH(qp, &quirks, entry) {
-                       if (regexec(&qp->regex_class, win->ch.class_name, 0,
-                           NULL, 0) == 0 && regexec(&qp->regex_instance,
-                           win->ch.instance_name, 0, NULL, 0) == 0 &&
-                           regexec(&qp->regex_name, name, 0, NULL, 0) == 0) {
-                               DNPRINTF(SWM_D_CLASS, "manage_window: matched "
-                                   "quirk: %s:%s:%s mask: %#lx\n", qp->class,
-                                   qp->instance, qp->name, qp->quirk);
-                               if (qp->quirk & SWM_Q_FLOAT)
-                                       win->floating = 1;
-                               win->quirks = qp->quirk;
-                       }
+       class = win->ch.class_name ? win->ch.class_name : "";
+       instance = win->ch.instance_name ? win->ch.instance_name : "";
+       name = get_win_name(win->id);
 
-               }
+       DNPRINTF(SWM_D_CLASS, "manage_window: class: %s, instance: %s, "
+           "name: %s\n", class, instance, name);
 
-               free(name);
+       /* java is retarded so treat it special */
+       if (win->ch.instance_name && strstr(win->ch.instance_name, "sun-awt")) {
+               DNPRINTF(SWM_D_CLASS, "manage_window: java window detected.\n");
+               win->java = 1;
+       }
+
+       TAILQ_FOREACH(qp, &quirks, entry) {
+               if (regexec(&qp->regex_class, class, 0, NULL, 0) == 0 &&
+                   regexec(&qp->regex_instance, instance, 0, NULL, 0) == 0 &&
+                   regexec(&qp->regex_name, name, 0, NULL, 0) == 0) {
+                       DNPRINTF(SWM_D_CLASS, "manage_window: matched "
+                           "quirk: %s:%s:%s mask: %#lx\n", qp->class,
+                           qp->instance, qp->name, qp->quirk);
+                       if (qp->quirk & SWM_Q_FLOAT)
+                               win->floating = 1;
+                       win->quirks = qp->quirk;
+               }
        }
 
+       free(name);
+
        /* Alter window position if quirky */
        if (win->quirks & SWM_Q_ANYWHERE)
                win->manual = 1;