]> code.delx.au - spectrwm/commitdiff
Reuse class hint in the status-bar.
authorTiago Cunha <tcunha@gmx.com>
Sat, 12 May 2012 20:52:20 +0000 (21:52 +0100)
committerTiago Cunha <tcunha@gmx.com>
Tue, 5 Jun 2012 21:30:06 +0000 (22:30 +0100)
The window's class hint is already retrieved by the manage_window
function, which is called when a new application is spawned. Therefore,
use it when displaying the application's class and name, instead of
fetching them again with XGetClassHint(3).

Besides, its error checking was incorrect, since it also returns zero on
error.

spectrwm.c

index d88c1fb0c3d0f75c9d0e35c0d798ca42b1059ede..796153b47edfa3db573b016ad62abfcf9b179884 100644 (file)
@@ -1353,32 +1353,24 @@ void
 bar_class_name(char *s, ssize_t sz, struct ws_win *cur_focus)
 {
        int                     do_class, do_name;
-       Status                  status;
-       XClassHint              *xch = NULL;
+       XClassHint              *ch;
 
-       if ((title_name_enabled == 1 || title_class_enabled == 1) &&
-           cur_focus != NULL) {
-               if ((xch = XAllocClassHint()) == NULL)
-                       goto out;
-               status = XGetClassHint(display, cur_focus->id, xch);
-               if (status == BadWindow || status == BadAlloc)
-                       goto out;
-               do_class = (title_class_enabled && xch->res_class != NULL);
-               do_name = (title_name_enabled && xch->res_name != NULL);
-               if (do_class)
-                       strlcat(s, xch->res_class, sz);
-               if (do_class && do_name)
-                       strlcat(s, ":", sz);
-               if (do_name)
-                       strlcat(s, xch->res_name, sz);
-               strlcat(s, "    ", sz);
-       }
-out:
-       if (xch) {
-               XFree(xch->res_name);
-               XFree(xch->res_class);
-               XFree(xch);
-       }
+       if (title_name_enabled == 0 && title_class_enabled == 0)
+               return;
+       if (cur_focus == NULL)
+               return;
+
+       ch = &cur_focus->ch;
+       do_class = (title_class_enabled && ch->res_class != NULL);
+       do_name = (title_name_enabled && ch->res_name != NULL);
+
+       if (do_class)
+               strlcat(s, ch->res_class, sz);
+       if (do_class && do_name)
+               strlcat(s, ":", sz);
+       if (do_name)
+               strlcat(s, ch->res_name, sz);
+       strlcat(s, "    ", sz);
 }
 
 void