#define BORDER(w) (w->bordered ? border_width : 0)
#define MAX_X(r) ((r)->g.x + (r)->g.w)
#define MAX_Y(r) ((r)->g.y + (r)->g.h)
-#define SH_MIN(w) (w)->sh_mask & PMinSize
+#define SH_MIN(w) (w)->sh.flags & XCB_SIZE_HINT_P_MIN_SIZE
#define SH_MIN_W(w) (w)->sh.min_width
#define SH_MIN_H(w) (w)->sh.min_height
-#define SH_MAX(w) (w)->sh_mask & PMaxSize
+#define SH_MAX(w) (w)->sh.flags & XCB_SIZE_HINT_P_MAX_SIZE
#define SH_MAX_W(w) (w)->sh.max_width
#define SH_MAX_H(w) (w)->sh.max_height
-#define SH_INC(w) (w)->sh_mask & PResizeInc
+#define SH_INC(w) (w)->sh.flags & XCB_SIZE_HINT_P_RESIZE_INC
#define SH_INC_W(w) (w)->sh.width_inc
#define SH_INC_H(w) (w)->sh.height_inc
#define SWM_MAX_FONT_STEPS (3)
struct workspace *ws; /* always valid */
struct swm_screen *s; /* always valid, never changes */
xcb_get_geometry_reply_t *wa;
- XSizeHints sh;
- long sh_mask;
- XClassHint ch;
+ xcb_size_hints_t sh;
+ xcb_get_wm_class_reply_t ch;
xcb_wm_hints_t hints;
};
TAILQ_HEAD(ws_win_list, ws_win);
{
if (r == NULL || r->ws == NULL || r->ws->focus == NULL)
return;
- if (r->ws->focus->ch.res_class != NULL)
- strlcat(s, r->ws->focus->ch.res_class, sz);
+ if (r->ws->focus->ch.class_name != NULL)
+ strlcat(s, r->ws->focus->ch.class_name, sz);
}
void
{
if (r == NULL || r->ws == NULL || r->ws->focus == NULL)
return;
- if (r->ws->focus->ch.res_name != NULL)
- strlcat(s, r->ws->focus->ch.res_name, sz);
+ if (r->ws->focus->ch.instance_name != NULL)
+ strlcat(s, r->ws->focus->ch.instance_name, sz);
}
void
drain_enter_notify(void)
{
int i = 0;
+ XEvent cne;
- while (xcb_poll_for_event(conn))
+ while (XCheckMaskEvent(display, EnterWindowMask, &cne))
i++;
DNPRINTF(SWM_D_EVENT, "drain_enter_notify: drained: %d\n", i);
ce.window = ev->window;
/* make response appear more WM_SIZE_HINTS-compliant */
- if (win->sh_mask)
+ if (win->sh.flags)
DNPRINTF(SWM_D_MISC, "config_win: hints: window: 0x%x,"
- " sh_mask: %ld, min: %d x %d, max: %d x %d, inc: "
- "%d x %d\n", win->id, win->sh_mask, SH_MIN_W(win),
+ " sh.flags: %u, min: %d x %d, max: %d x %d, inc: "
+ "%d x %d\n", win->id, win->sh.flags, SH_MIN_W(win),
SH_MIN_H(win), SH_MAX_W(win), SH_MAX_H(win),
SH_INC_W(win), SH_INC_H(win));
void
stack_master(struct workspace *ws, struct swm_geometry *g, int rot, int flip)
{
- XWindowAttributes wa;
struct swm_geometry win_g, r_g = *g;
struct ws_win *win, *fs_win = NULL;
int i, j, s, stacks;
int split, colno, winno, mwin, msize, mscale;
int remain, missing, v_slice, reconfigure;
int bordered = 1;
+ xcb_get_window_attributes_reply_t *war;
DNPRINTF(SWM_D_STACK, "stack_master: workspace: %d, rot: %s, "
"flip: %s\n", ws->idx, YESNO(rot), YESNO(flip));
update_window(win);
}
- if (XGetWindowAttributes(display, win->id, &wa))
- if (wa.map_state == IsUnmapped)
+ war = xcb_get_window_attributes_reply(conn,
+ xcb_get_window_attributes(conn, win->id),
+ NULL);
+ if (war) {
+ if (war->map_state == XCB_MAP_STATE_UNMAPPED)
map_window_raised(win->id);
+ free(war);
+ }
last_h = win_g.h;
i++;
c = xcb_icccm_get_wm_name(conn, win);
if (xcb_icccm_get_wm_name_reply(conn, c, &r, NULL)) {
- name = malloc(r.name_len + 1);
- if (!name) {
- xcb_get_text_property_reply_wipe(&r);
- return (NULL);
+ if (r.name_len > 0) {
+ name = malloc(r.name_len + 1);
+ if (!name) {
+ xcb_get_text_property_reply_wipe(&r);
+ return (NULL);
+ }
+ memcpy(name, r.name, r.name_len);
+ name[r.name_len] = '\0';
}
- memcpy(name, r.name, r.name_len);
- name[r.name_len] = '\0';
-
xcb_get_text_property_reply_wipe(&r);
}
int i, ws_idx, border_me = 0;
xcb_atom_t ws_idx_atom = XCB_ATOM_NONE;
char ws_idx_str[SWM_PROPLEN], *prop = NULL;
+ size_t proplen;
struct swm_region *r;
const char *errstr;
struct pid_e *p;
/* Get all the window data in one shot */
ws_idx_atom = get_atom_from_string("_SWM_WS");
+ fprintf(stderr, "ws_idx_atom: %d\n", ws_idx_atom);
if (ws_idx_atom) {
gpr = xcb_get_property_reply(conn,
xcb_get_property(conn, False, id, ws_idx_atom,
XCB_ATOM_STRING, 0, SWM_PROPLEN),
NULL);
if (gpr) {
- prop = malloc(xcb_get_property_value_length(gpr) + 1);
- if (prop) {
- memcpy(prop, xcb_get_property_value(gpr),
- xcb_get_property_value_length(gpr));
- prop[xcb_get_property_value_length(gpr)] = '\0';
+ proplen = xcb_get_property_value_length(gpr);
+ if (proplen > 0) {
+ prop = malloc(proplen + 1);
+ if (prop) {
+ memcpy(prop,
+ xcb_get_property_value(gpr),
+ proplen);
+ prop[proplen] = '\0';
+ }
}
free(gpr);
}
-
}
win->wa = xcb_get_geometry_reply(conn,
xcb_get_geometry(conn, id),
NULL);
- XGetWMNormalHints(display, id, &win->sh, &win->sh_mask);
+ xcb_get_wm_normal_hints_reply(conn,
+ xcb_get_wm_normal_hints(conn, id),
+ &win->sh, NULL);
xcb_icccm_get_wm_hints_reply(conn,
xcb_icccm_get_wm_hints(conn, id),
&win->hints, NULL);
ewmh_autoquirk(win);
- if (XGetClassHint(display, win->id, &win->ch)) {
+ if (xcb_get_wm_class_reply(conn,
+ xcb_get_wm_class(conn, win->id),
+ &win->ch, NULL)) {
DNPRINTF(SWM_D_CLASS, "manage_window: class: %s, name: %s\n",
- win->ch.res_class, win->ch.res_name);
+ win->ch.class_name, win->ch.instance_name);
/* java is retarded so treat it special */
- if (strstr(win->ch.res_name, "sun-awt")) {
+ if (strstr(win->ch.instance_name, "sun-awt")) {
win->java = 1;
border_me = 1;
}
TAILQ_FOREACH(qp, &quirks, entry) {
- if (!strcmp(win->ch.res_class, qp->class) &&
- !strcmp(win->ch.res_name, qp->name)) {
+ if (!strcmp(win->ch.class_name, qp->class) &&
+ !strcmp(win->ch.instance_name, qp->name)) {
DNPRINTF(SWM_D_CLASS, "manage_window: found: "
- "class: %s, name: %s\n", win->ch.res_class,
- win->ch.res_name);
+ "class: %s, name: %s\n", win->ch.class_name,
+ win->ch.instance_name);
if (qp->quirk & SWM_Q_FLOAT) {
win->floating = 1;
border_me = 1;
if (win->wa)
free(win->wa);
- if (win->ch.res_class)
- XFree(win->ch.res_class);
- if (win->ch.res_name)
- XFree(win->ch.res_name);
+
+ xcb_get_wm_class_reply_wipe(&win->ch);
kill_refs(win);
XConfigureWindow(display, ev->window, ev->value_mask, &wc);
} else if ((!win->manual || win->quirks & SWM_Q_ANYWHERE) &&
- !(win->sh_mask & EWMH_F_FULLSCREEN)) {
+ !(win->ewmh_flags & EWMH_F_FULLSCREEN)) {
win->g_float.x = ev->x - X(win->ws->r);
win->g_float.y = ev->y - Y(win->ws->r);
win->g_float.w = ev->width;
win = find_window(e->xconfigure.window);
if (win) {
- XGetWMNormalHints(display, win->id, &win->sh, &win->sh_mask);
+ xcb_get_wm_normal_hints_reply(conn,
+ xcb_get_wm_normal_hints(conn, win->id),
+ &win->sh, NULL);
adjust_font(win);
if (font_adjusted)
stack();
struct ws_win *win;
XPropertyEvent *ev = &e->xproperty;
#ifdef SWM_DEBUG
- xcb_get_atom_name_reply_t *r;
+ char *name;
+ size_t len;
+ xcb_get_atom_name_reply_t *r;
r = xcb_get_atom_name_reply(conn,
xcb_get_atom_name(conn, ev->atom),
NULL);
if (r) {
- DNPRINTF(SWM_D_EVENT,
- "propertynotify: window: 0x%x, atom: %s\n",
- ev->window, );
+ len = xcb_get_atom_name_name_length(r);
+ if (len > 0) {
+ name = malloc(len + 1);
+ if (name) {
+ memcpy(name, xcb_get_atom_name_name(r), len);
+ name[len] = '\0';
+
+ DNPRINTF(SWM_D_EVENT,
+ "propertynotify: window: 0x%lx, "
+ "atom: %s\n",
+ ev->window, name);
+ free(name);
+ }
+ }
free(r);
}
#endif
long mask;
XGetWMNormalHints(display, win->id, &win->sh, &mask);
warnx("normal hints: flag 0x%x", win->sh.flags);
- if (win->sh.flags & PMinSize) {
+ if (win->sh.flags & XCB_SIZE_HINT_P_MIN_SIZE) {
WIDTH(win) = win->sh.min_width;
HEIGHT(win) = win->sh.min_height;
warnx("min %d %d", WIDTH(win), HEIGHT(win));
XMoveResizeWindow(display, win->id,
X(win), Y(win), WIDTH(win), HEIGHT(win));
#endif
- case XA_WM_CLASS:
- case XA_WM_NAME:
+ case XCB_ATOM_WM_CLASS:
+ case XCB_ATOM_WM_NAME:
bar_update();
break;
default:
SubstructureNotifyMask, &cne))
;
/* resend unmap because we ated it */
- XUnmapWindow(display, e->xunmap.window);
+ xcb_unmap_window(conn, e->xunmap.window);
}
if (focus_mode == SWM_FOCUS_DEFAULT)