X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=5ea7095429b62619367d05177cc2c8a622395fe0;hb=0943667cdc5a86458c17ce6ce223c546cf86c7e6;hp=496feb2cbd0d4b21ead11b62edfe749e7b79070d;hpb=46139e4404948164a0ac0d6d8957f7004eda03a2;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 496feb2..5ea7095 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -1251,26 +1251,34 @@ find_pid(long pid) return (NULL); } -unsigned long -name_to_color(char *colorname) -{ - Colormap cmap; - Status status; - XColor screen_def, exact_def; - unsigned long result = 0; - char cname[32] = "#"; - - cmap = DefaultColormap(display, screens[0].idx); - status = XAllocNamedColor(display, cmap, colorname, - &screen_def, &exact_def); - if (!status) { +uint32_t +name_to_color(const char *colorname) +{ + uint32_t result = 0; + char cname[32] = "#"; + xcb_screen_t *screen; + xcb_colormap_t cmap; + xcb_alloc_named_color_cookie_t c; + xcb_alloc_named_color_reply_t *r; + + /* XXX - does not support rgb:/RR/GG/BB + * will need to use xcb_alloc_color + */ + screen = xcb_setup_roots_iterator(xcb_get_setup(conn)).data; + cmap = screen->default_colormap; + + c = xcb_alloc_named_color(conn, cmap, strlen(colorname), colorname); + r = xcb_alloc_named_color_reply(conn, c, NULL); + if (!r) { strlcat(cname, colorname + 2, sizeof cname - 1); - status = XAllocNamedColor(display, cmap, cname, &screen_def, - &exact_def); + c = xcb_alloc_named_color(conn, cmap, strlen(cname), + cname); + r = xcb_alloc_named_color_reply(conn, c, NULL); } - if (status) - result = screen_def.pixel; - else + if (r) { + result = r->pixel; + free(r); + } else warnx("color '%s' not found", colorname); return (result); @@ -1814,8 +1822,8 @@ bar_toggle(struct swm_region *r, union arg *args) void bar_refresh(void) { - XSetWindowAttributes wa; struct swm_region *r; + uint32_t wa[2]; int i, num_screens; /* do this here because the conf file is in memory */ @@ -1847,18 +1855,15 @@ bar_refresh(void) } } - bzero(&wa, sizeof wa); num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); for (i = 0; i < num_screens; i++) TAILQ_FOREACH(r, &screens[i].rl, entry) { if (r->bar == NULL) continue; - wa.border_pixel = - screens[i].c[SWM_S_COLOR_BAR_BORDER].color; - wa.background_pixel = - screens[i].c[SWM_S_COLOR_BAR].color; - XChangeWindowAttributes(display, r->bar->id, - CWBackPixel | CWBorderPixel, &wa); + wa[0] = screens[i].c[SWM_S_COLOR_BAR].color; + wa[1] = screens[i].c[SWM_S_COLOR_BAR_BORDER].color; + xcb_change_window_attributes(conn, r->bar->id, + XCB_CW_BACK_PIXEL | XCB_CW_BORDER_PIXEL, wa); } bar_update(); }