X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=408efc25b0f0a6cde731cbd3d79a82838e3ec11e;hb=99990fbed4af29ce5e1daa1650fd7813f70e2feb;hp=749cdb91a59297ced224be0648154575dc244418;hpb=e6427c7ed9f0d102b27cec6b6b10ef18fa264703;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 749cdb9..408efc2 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -390,7 +390,7 @@ struct ws_win { xcb_get_geometry_reply_t *wa; XSizeHints sh; long sh_mask; - XClassHint ch; + xcb_get_wm_class_reply_t ch; xcb_wm_hints_t hints; }; TAILQ_HEAD(ws_win_list, ws_win); @@ -1518,8 +1518,8 @@ bar_class_name(char *s, size_t sz, struct swm_region *r) { if (r == NULL || r->ws == NULL || r->ws->focus == NULL) return; - if (r->ws->focus->ch.res_class != NULL) - strlcat(s, r->ws->focus->ch.res_class, sz); + if (r->ws->focus->ch.class_name != NULL) + strlcat(s, r->ws->focus->ch.class_name, sz); } void @@ -1527,8 +1527,8 @@ bar_title_name(char *s, size_t sz, struct swm_region *r) { if (r == NULL || r->ws == NULL || r->ws->focus == NULL) return; - if (r->ws->focus->ch.res_name != NULL) - strlcat(s, r->ws->focus->ch.res_name, sz); + if (r->ws->focus->ch.instance_name != NULL) + strlcat(s, r->ws->focus->ch.instance_name, sz); } void @@ -6394,6 +6394,7 @@ manage_window(xcb_window_t id) int i, ws_idx, border_me = 0; xcb_atom_t ws_idx_atom = XCB_ATOM_NONE; char ws_idx_str[SWM_PROPLEN], *prop = NULL; + size_t proplen; struct swm_region *r; const char *errstr; struct pid_e *p; @@ -6449,21 +6450,25 @@ manage_window(xcb_window_t id) /* Get all the window data in one shot */ ws_idx_atom = get_atom_from_string("_SWM_WS"); + fprintf(stderr, "ws_idx_atom: %d\n", ws_idx_atom); if (ws_idx_atom) { gpr = xcb_get_property_reply(conn, xcb_get_property(conn, False, id, ws_idx_atom, XCB_ATOM_STRING, 0, SWM_PROPLEN), NULL); if (gpr) { - prop = malloc(xcb_get_property_value_length(gpr) + 1); - if (prop) { - memcpy(prop, xcb_get_property_value(gpr), - xcb_get_property_value_length(gpr)); - prop[xcb_get_property_value_length(gpr)] = '\0'; + proplen = xcb_get_property_value_length(gpr); + if (proplen > 0) { + prop = malloc(proplen + 1); + if (prop) { + memcpy(prop, + xcb_get_property_value(gpr), + proplen); + prop[proplen] = '\0'; + } } free(gpr); } - } win->wa = xcb_get_geometry_reply(conn, xcb_get_geometry(conn, id), @@ -6590,22 +6595,24 @@ manage_window(xcb_window_t id) ewmh_autoquirk(win); - if (XGetClassHint(display, win->id, &win->ch)) { + if (xcb_get_wm_class_reply(conn, + xcb_get_wm_class(conn, win->id), + &win->ch, NULL)) { DNPRINTF(SWM_D_CLASS, "manage_window: class: %s, name: %s\n", - win->ch.res_class, win->ch.res_name); + win->ch.class, win->ch.instance_name); /* java is retarded so treat it special */ - if (strstr(win->ch.res_name, "sun-awt")) { + if (strstr(win->ch.instance_name, "sun-awt")) { win->java = 1; border_me = 1; } TAILQ_FOREACH(qp, &quirks, entry) { - if (!strcmp(win->ch.res_class, qp->class) && - !strcmp(win->ch.res_name, qp->name)) { + if (!strcmp(win->ch.class_name, qp->class) && + !strcmp(win->ch.instance_name, qp->name)) { DNPRINTF(SWM_D_CLASS, "manage_window: found: " - "class: %s, name: %s\n", win->ch.res_class, - win->ch.res_name); + "class: %s, name: %s\n", win->ch.class_name, + win->ch.instance_name); if (qp->quirk & SWM_Q_FLOAT) { win->floating = 1; border_me = 1; @@ -6673,10 +6680,8 @@ free_window(struct ws_win *win) if (win->wa) free(win->wa); - if (win->ch.res_class) - XFree(win->ch.res_class); - if (win->ch.res_name) - XFree(win->ch.res_name); + + xcb_get_wm_class_reply_wipe(&win->ch); kill_refs(win);