X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=2bfd08762f2b0779afd5b9a2c7afacb6db1604f2;hb=ba9be109b4a6bacdb4f7eacc029be0283fa62fab;hp=225029bd13cd15d374b6b6009bef8a0efb45468e;hpb=e876d7de1335a16124065cabde4d51fd10cfca6f;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 225029b..2bfd087 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -696,23 +696,39 @@ out: void setup_ewmh(void) { - int i,j; - Atom sup_list; - - sup_list = XInternAtom(display, "_NET_SUPPORTED", False); - - for (i = 0; i < LENGTH(ewmh); i++) - ewmh[i].atom = XInternAtom(display, ewmh[i].name, False); + xcb_atom_t sup_list; + xcb_intern_atom_cookie_t c; + xcb_intern_atom_reply_t *r; + int i, j, num_screens; + + c = xcb_intern_atom(conn, False, strlen("_NET_SUPPORTED"), + "_NET_SUPPORTED"); + r = xcb_intern_atom_reply(conn, c, NULL); + if (r) { + sup_list = r->atom; + free(r); + } + + for (i = 0; i < LENGTH(ewmh); i++) { + c = xcb_intern_atom(conn, False, strlen(ewmh[i].name), + ewmh[i].name); + r = xcb_intern_atom_reply(conn, c, NULL); + if (r) { + ewmh[i].atom = r->atom; + free(r); + } + } - for (i = 0; i < ScreenCount(display); i++) { + num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); + for (i = 0; i < num_screens; i++) { /* Support check window will be created by workaround(). */ /* Report supported atoms */ - XDeleteProperty(display, screens[i].root, sup_list); + xcb_delete_property(conn, screens[i].root, sup_list); for (j = 0; j < LENGTH(ewmh); j++) - XChangeProperty(display, screens[i].root, - sup_list, XA_ATOM, 32, - PropModeAppend, (unsigned char *)&ewmh[j].atom, 1); + xcb_change_property(conn, XCB_PROP_MODE_APPEND, + screens[i].root, sup_list, XCB_ATOM_ATOM, 32, 1, + &ewmh[j].atom); } } @@ -1249,13 +1265,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) @@ -1263,7 +1282,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 @@ -7289,12 +7308,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"); @@ -7307,7 +7327,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);