X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=63e925ac7468e4ad4f73a48a5aad7da8e6039206;hb=4b08cf2e0188dd98ad57aee3237ceadde4ff848a;hp=e70be9266d614589cef03589ac6282ef10c57b3d;hpb=376c5ec3f05e789780a47c298c550ea45e16c4fb;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index e70be92..63e925a 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -650,19 +650,26 @@ get_property(Window id, Atom atom, long count, Atom type, unsigned long *nitems, void update_iconic(struct ws_win *win, int newv) { - int32_t v = newv; - Atom iprop; + int32_t v = newv; + xcb_atom_t iprop; + xcb_intern_atom_cookie_t c; + xcb_intern_atom_reply_t *r; win->iconic = newv; - iprop = XInternAtom(display, "_SWM_ICONIC", False); - if (!iprop) + c = xcb_intern_atom(conn, False, strlen("_SWM_ICONIC"), "_SWM_ICONIC"); + r = xcb_intern_atom_reply(conn, c, NULL); + if (r) { + iprop = r->atom; + free(r); + } else return; + if (newv) - XChangeProperty(display, win->id, iprop, XA_INTEGER, 32, - PropModeReplace, (unsigned char *)&v, 1); + xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win->id, + iprop, XCB_ATOM_INTEGER, 32, 1, &v); else - XDeleteProperty(display, win->id, iprop); + xcb_delete_property(conn, win->id, iprop); } int @@ -1265,13 +1272,16 @@ name_to_color(char *colorname) void setscreencolor(char *val, int i, int c) { - if (i > 0 && i <= ScreenCount(display)) { + int num_screens; + + num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); + if (i > 0 && i <= num_screens) { 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) err(1, "strdup"); } else if (i == -1) { - for (i = 0; i < ScreenCount(display); i++) { + for (i = 0; i < num_screens; 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) @@ -1279,7 +1289,7 @@ setscreencolor(char *val, int i, int c) } } else errx(1, "invalid screen index: %d out of bounds (maximum %d)", - i, ScreenCount(display)); + i, num_screens); } void @@ -7305,12 +7315,13 @@ grab_windows(void) void setup_screens(void) { - int i, j, k; + int i, j, k, num_screens; int errorbase, major, minor; struct workspace *ws; XGCValues gcv; - if ((screens = calloc(ScreenCount(display), + num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); + if ((screens = calloc(num_screens, sizeof(struct swm_screen))) == NULL) err(1, "setup_screens: calloc: failed to allocate memory for " "screens"); @@ -7323,7 +7334,7 @@ setup_screens(void) xrandr_support = 0; /* map physical screens */ - for (i = 0; i < ScreenCount(display); i++) { + for (i = 0; i < num_screens; i++) { DNPRINTF(SWM_D_WS, "setup_screens: init screen: %d\n", i); screens[i].idx = i; TAILQ_INIT(&screens[i].rl);