#include <X11/Xatom.h>
#include <X11/Xlib-xcb.h>
#include <xcb/randr.h>
+#include <xcb/xcb_atom.h>
#include <xcb/xcb_icccm.h>
#include <xcb/xcb_keysyms.h>
#include <X11/Xproto.h>
XSizeHints sh;
long sh_mask;
XClassHint ch;
- XWMHints *hints;
+ xcb_wm_hints_t hints;
};
TAILQ_HEAD(ws_win_list, ws_win);
set_child_transient(struct ws_win *win, Window *trans)
{
struct ws_win *parent, *w;
- XWMHints *wmh = NULL;
struct swm_region *r;
struct workspace *ws;
+ xcb_wm_hints_t wmh;
parent = find_window(win->transient);
if (parent)
DNPRINTF(SWM_D_MISC, "set_child_transient: parent doesn't exist"
" for 0x%x trans 0x%x\n", win->id, win->transient);
- if (win->hints == NULL) {
- warnx("no hints for 0x%x", win->id);
- return;
- }
-
r = root_to_region(win->wa.root);
ws = r->ws;
/* parent doen't exist in our window list */
TAILQ_FOREACH(w, &ws->winlist, entry) {
- if (wmh)
- XFree(wmh);
-
- if ((wmh = XGetWMHints(display, w->id)) == NULL) {
+ if (xcb_icccm_get_wm_hints_reply(conn,
+ xcb_icccm_get_wm_hints(conn, w->id),
+ &wmh, NULL) != 1) {
warnx("can't get hints for 0x%x", w->id);
continue;
}
- if (win->hints->window_group != wmh->window_group)
+ if (win->hints.window_group != wmh.window_group)
continue;
w->child_trans = win;
break;
}
}
-
- if (wmh)
- XFree(wmh);
}
long
Window trans = 0;
struct workspace *ws;
struct ws_win *win, *ww;
- int format, i, ws_idx, n, border_me = 0;
+ int format, i, ws_idx, border_me = 0;
unsigned long nitems, bytes;
Atom ws_idx_atom = 0, type;
- Atom *prot = NULL, *pp;
unsigned char ws_idx_str[SWM_PROPLEN], *prop = NULL;
struct swm_region *r;
const char *errstr;
struct pid_e *p;
struct quirk *qp;
uint32_t event_mask;
+ xcb_atom_t prot;
+ xcb_get_wm_protocols_reply_t wpr;
if ((win = find_window(id)) != NULL)
return (win); /* already being managed */
}
XGetWindowAttributes(display, id, &win->wa);
XGetWMNormalHints(display, id, &win->sh, &win->sh_mask);
- win->hints = XGetWMHints(display, id);
+ xcb_icccm_get_wm_hints_reply(conn,
+ xcb_icccm_get_wm_hints(conn, id),
+ &win->hints, NULL);
XGetTransientForHint(display, id, &trans);
if (trans) {
win->transient = trans;
"transient: 0x%x\n", win->id, win->transient);
}
+ prot = xcb_atom_get_fast_reply(conn,
+ xcb_atom_get_fast(conn, False, strlen("WM_PROTOCOLS"),
+ "WM_PROTOCOLS"),
+ NULL);
/* get supported protocols */
- if (XGetWMProtocols(display, id, &prot, &n)) {
- for (i = 0, pp = prot; i < n; i++, pp++) {
- if (*pp == takefocus)
+ if (xcb_get_wm_protocols_reply(conn,
+ xcb_get_wm_protocols(conn, id, prot),
+ &wpr, NULL)) {
+ for (i = 0; i < wpr.atoms_len; i++) {
+ if (wpr.atoms[i] == takefocus)
win->take_focus = 1;
- if (*pp == adelete)
+ if (wpr.atoms[i] == adelete)
win->can_delete = 1;
}
- if (prot)
- XFree(prot);
+ xcb_get_wm_protocols_reply_wipe(&wpr);
}
win->iconic = get_iconic(win);
focus_prev(win);
- if (win->hints) {
- XFree(win->hints);
- win->hints = NULL;
- }
-
TAILQ_REMOVE(&win->ws->winlist, win, entry);
TAILQ_INSERT_TAIL(&win->ws->unmanagedlist, win, entry);
}
{
struct ws_win *win;
struct swm_region *r;
- XWindowAttributes wa;
XMapRequestEvent *ev = &e->xmaprequest;
+ xcb_get_window_attributes_reply_t *war;
DNPRINTF(SWM_D_EVENT, "maprequest: window: 0x%lx\n",
e->xmaprequest.window);
- if (!XGetWindowAttributes(display, ev->window, &wa))
+ war = xcb_get_window_attributes_reply(conn,
+ xcb_get_window_attributes(conn, ev->window),
+ NULL);
+ if (!war)
return;
- if (wa.override_redirect)
+ if (war->override_redirect) {
+ free(war);
return;
+ }
+ free(war);
win = manage_window(e->xmaprequest.window);
- if (win == NULL)
+ if (win == NULL) {
return; /* can't happen */
+ }
stack();