X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=8bdecf16e41fd9ab7fd800a97a87df5f3b50c50b;hb=e18f7c05ed1d3400a9368267ec73b4d1999243db;hp=b44e5ac52d2aa0e1fb9b3534d5cfdecb1ea310af;hpb=e3447e3952eeecbf6b6ccfb6b75632b218217c92;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index b44e5ac..8bdecf1 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -924,28 +924,28 @@ ewmh_update_win_state(struct ws_win *win, long state, long action) win->ewmh_flags & EWMH_F_FULLSCREEN)) win->ewmh_flags = orig_flags; /* revert */ - XDeleteProperty(display, win->id, ewmh[_NET_WM_STATE].atom); + xcb_delete_property(conn, win->id, ewmh[_NET_WM_STATE].atom); if (win->ewmh_flags & EWMH_F_FULLSCREEN) - XChangeProperty(display, win->id, ewmh[_NET_WM_STATE].atom, - XA_ATOM, 32, PropModeAppend, - (unsigned char *)&ewmh[_NET_WM_STATE_FULLSCREEN].atom, 1); + xcb_change_property(conn, XCB_PROP_MODE_APPEND, win->id, + ewmh[_NET_WM_STATE].atom, XCB_ATOM_ATOM, 32, 1, + &ewmh[_NET_WM_STATE_FULLSCREEN].atom); if (win->ewmh_flags & EWMH_F_SKIP_PAGER) - XChangeProperty(display, win->id, ewmh[_NET_WM_STATE].atom, - XA_ATOM, 32, PropModeAppend, - (unsigned char *)&ewmh[_NET_WM_STATE_SKIP_PAGER].atom, 1); + xcb_change_property(conn, XCB_PROP_MODE_APPEND, win->id, + ewmh[_NET_WM_STATE].atom, XCB_ATOM_ATOM, 32, 1, + &ewmh[_NET_WM_STATE_SKIP_PAGER].atom); if (win->ewmh_flags & EWMH_F_SKIP_TASKBAR) - XChangeProperty(display, win->id, ewmh[_NET_WM_STATE].atom, - XA_ATOM, 32, PropModeAppend, - (unsigned char *)&ewmh[_NET_WM_STATE_SKIP_TASKBAR].atom, 1); + xcb_change_property(conn, XCB_PROP_MODE_APPEND, win->id, + ewmh[_NET_WM_STATE].atom, XCB_ATOM_ATOM, 32, 1, + &ewmh[_NET_WM_STATE_SKIP_TASKBAR].atom); if (win->ewmh_flags & EWMH_F_ABOVE) - XChangeProperty(display, win->id, ewmh[_NET_WM_STATE].atom, - XA_ATOM, 32, PropModeAppend, - (unsigned char *)&ewmh[_NET_WM_STATE_ABOVE].atom, 1); + xcb_change_property(conn, XCB_PROP_MODE_APPEND, win->id, + ewmh[_NET_WM_STATE].atom, XCB_ATOM_ATOM, 32, 1, + &ewmh[_NET_WM_STATE_ABOVE].atom); if (win->ewmh_flags & SWM_F_MANUAL) - XChangeProperty(display, win->id, ewmh[_NET_WM_STATE].atom, - XA_ATOM, 32, PropModeAppend, - (unsigned char *)&ewmh[_SWM_WM_STATE_MANUAL].atom, 1); + xcb_change_property(conn, XCB_PROP_MODE_APPEND, win->id, + ewmh[_NET_WM_STATE].atom, XCB_ATOM_ATOM, 32, 1, + &ewmh[_SWM_WM_STATE_MANUAL].atom); } void @@ -1251,26 +1251,34 @@ find_pid(long pid) return (NULL); } -unsigned long -name_to_color(char *colorname) +uint32_t +name_to_color(const char *colorname) { - Colormap cmap; - Status status; - XColor screen_def, exact_def; - unsigned long result = 0; - char cname[32] = "#"; + 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; - cmap = DefaultColormap(display, screens[0].idx); - status = XAllocNamedColor(display, cmap, colorname, - &screen_def, &exact_def); - if (!status) { + /* 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(); } @@ -2199,7 +2204,6 @@ restart(struct swm_region *r, union arg *args) bar_extra_stop(); bar_extra = 1; unmap_all(); - xcb_disconnect(conn); XCloseDisplay(display); execvp(start_argv[0], start_argv); warn("execvp failed"); @@ -4155,23 +4159,23 @@ constrain_window(struct ws_win *win, struct swm_region *r, int resizable) void update_window(struct ws_win *win) { - unsigned int mask; - XWindowChanges wc; - - bzero(&wc, sizeof wc); - mask = CWBorderWidth | CWWidth | CWHeight | CWX | CWY; + uint16_t mask; + uint32_t wc[5]; - wc.border_width = BORDER(win); - wc.x = X(win); - wc.y = Y(win); - wc.width = WIDTH(win); - wc.height = HEIGHT(win); + mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y | + XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT | + XCB_CONFIG_WINDOW_BORDER_WIDTH; + wc[0] = X(win); + wc[1] = Y(win); + wc[2] = WIDTH(win); + wc[3] = HEIGHT(win); + wc[4] = BORDER(win); - DNPRINTF(SWM_D_EVENT, "update_window: window: 0x%lx, (x,y) w x h: " - "(%d,%d) %d x %d, bordered: %s\n", win->id, wc.x, wc.y, wc.width, - wc.height, YESNO(win->bordered)); + DNPRINTF(SWM_D_EVENT, "update_window: window: 0x%x, (x,y) w x h: " + "(%d,%d) %d x %d, bordered: %s\n", win->id, wc[0], wc[1], wc[2], + wc[3], YESNO(win->bordered)); - XConfigureWindow(display, win->id, mask, &wc); + xcb_configure_window(conn, win->id, mask, wc); } #define SWM_RESIZE_STEPS (50)