X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=1751412f18b4a70c6c3d34dca787b01f9800bcd9;hb=972d8078dac803b2896f7bfb3958d9e801e3321a;hp=e0552dd19e9c667be4116ae53ed9ce91366a00cd;hpb=9fa42be8ded2943b3d9fae021725ff4a21268255;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index e0552dd..1751412 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -647,7 +647,6 @@ struct ewmh_hint { }; /* function prototypes */ -xcb_char2b_t *char2b(const char *); int conf_load(char *, int); void constrain_window(struct ws_win *, struct swm_region *, int); void do_sync(void); @@ -659,7 +658,7 @@ void focus_magic(struct ws_win *); xcb_atom_t get_atom_from_string(const char *); xcb_screen_t *get_screen(int); char *get_win_name(xcb_window_t); -uint16_t getstate(xcb_window_t); +uint32_t getstate(xcb_window_t); void grabbuttons(struct ws_win *, int); void map_window_raised(xcb_window_t); void new_region(struct swm_screen *, int, int, int, int); @@ -672,26 +671,6 @@ void update_window(struct ws_win *); char *get_atom_name(xcb_atom_t); #endif -/* function definitions */ -xcb_char2b_t * -char2b(const char *str) -{ - xcb_char2b_t *s; - size_t i, len; - - len = strlen(str); - s = malloc(len * sizeof(xcb_char2b_t)); - if (!s) - return (NULL); - - for (i = 0; i < len; i++) { - s[i].byte1 = '\0'; - s[i].byte2 = str[i]; - } - - return (s); -} - int parse_rgb(const char *rgb, uint16_t *rr, uint16_t *gg, uint16_t *bb) { @@ -841,7 +820,7 @@ teardown_ewmh(void) pc = xcb_get_property(conn, 0, screens[i].root, sup_check, XCB_ATOM_WINDOW, 0, 1); pr = xcb_get_property_reply(conn, pc, NULL); - if (pr) { + if (pr && pr->format == sup_check) { id = *((xcb_window_t *)xcb_get_property_value(pr)); xcb_destroy_window(conn, id); @@ -1068,7 +1047,7 @@ void dumpwins(struct swm_region *r, union arg *args) { struct ws_win *win; - uint16_t state; + uint32_t state; xcb_get_window_attributes_cookie_t c; xcb_get_window_attributes_reply_t *wa; @@ -1984,20 +1963,19 @@ set_win_state(struct ws_win *win, uint16_t state) a_state, 32, 2, data); } -uint16_t +uint32_t getstate(xcb_window_t w) { - uint16_t result = 0; - uint16_t *pv; + uint32_t result = 0; xcb_get_property_cookie_t c; xcb_get_property_reply_t *r; - c = xcb_get_property(conn, 0, w, a_state, XCB_ATOM_ATOM, 0L, 2L); + c = xcb_get_property(conn, 0, w, a_state, a_state, 0L, 2L); r = xcb_get_property_reply(conn, c, NULL); if (r) { - pv = (uint16_t *)xcb_get_property_value(r); - result = *pv; + if (r->type == a_state && r->format == 32 && r->length == 2) + result = *((uint32_t *)xcb_get_property_value(r)); free(r); } @@ -2321,8 +2299,10 @@ find_window(xcb_window_t id) return (NULL); /* if we were looking for the parent return that window instead */ - if (r->parent == 0 || r->root == r->parent) + if (r->parent == 0 || r->root == r->parent) { + free(r); return (NULL); + } /* look for parent */ for (i = 0; i < num_screens; i++) @@ -3752,12 +3732,10 @@ get_win_name(xcb_window_t win) if (xcb_icccm_get_wm_name_reply(conn, c, &r, NULL)) { if (r.name_len > 0) { name = malloc(r.name_len + 1); - if (!name) { - xcb_icccm_get_text_property_reply_wipe(&r); - return (NULL); + if (name) { + memcpy(name, r.name, r.name_len); + name[r.name_len] = '\0'; } - memcpy(name, r.name, r.name_len); - name[r.name_len] = '\0'; } xcb_icccm_get_text_property_reply_wipe(&r); } @@ -6407,7 +6385,8 @@ window_get_pid(xcb_window_t win) goto tryharder; } - ret = *((pid_t *)xcb_get_property_value(pr)); + if (pr->type == apid && pr->format == 32) + ret = *((pid_t *)xcb_get_property_value(pr)); free(pr); return (ret); @@ -6419,7 +6398,7 @@ tryharder: pr = xcb_get_property_reply(conn, pc, NULL); if (!pr) return (0); - if (pr->type != XCB_ATOM_STRING) { + if (pr->type != apid) { free(pr); return (0); } @@ -6443,7 +6422,7 @@ get_ws_idx(xcb_window_t id) xcb_get_property(conn, 0, id, a_swm_ws, XCB_ATOM_STRING, 0, SWM_PROPLEN), NULL); - if (gpr) { + if (gpr && gpr->type) { proplen = xcb_get_property_value_length(gpr); if (proplen > 0) { prop = malloc(proplen + 1); @@ -6464,6 +6443,7 @@ get_ws_idx(xcb_window_t id) DNPRINTF(SWM_D_PROP, "get_ws_idx: window: #%s: %s", errstr, prop); } + free(prop); } return ws_idx; @@ -7115,7 +7095,7 @@ maprequest(xcb_map_request_event_t *e) char * get_atom_name(xcb_atom_t atom) { - char *name; + char *name = NULL; size_t len; xcb_get_atom_name_reply_t *r; @@ -7129,14 +7109,12 @@ get_atom_name(xcb_atom_t atom) if (name) { memcpy(name, xcb_get_atom_name_name(r), len); name[len] = '\0'; - - return name; } } free(r); } - return NULL; + return (name); } #endif