#endif
#if defined(__OpenBSD__)
-#define xcb_icccm_wm_hints_t xcb_wm_hints_t
-#define xcb_icccm_get_wm_hints xcb_get_wm_hints
-#define xcb_icccm_get_wm_hints_reply xcb_get_wm_hints_reply
+#define XCB_ICCCM_SIZE_HINT_P_MIN_SIZE XCB_SIZE_HINT_P_MIN_SIZE
+#define XCB_ICCCM_SIZE_HINT_P_MAX_SIZE XCB_SIZE_HINT_P_MAX_SIZE
+#define XCB_ICCCM_SIZE_HINT_P_RESIZE_INC XCB_SIZE_HINT_P_RESIZE_INC
#define XCB_ICCCM_WM_HINT_X_URGENCY XCB_WM_HINT_X_URGENCY
#define XCB_ICCCM_WM_STATE_ICONIC XCB_WM_STATE_ICONIC
#define XCB_ICCCM_WM_STATE_WITHDRAWN XCB_WM_STATE_WITHDRAWN
#define XCB_ICCCM_WM_STATE_NORMAL XCB_WM_STATE_NORMAL
+#define xcb_icccm_get_text_property_reply_t xcb_get_text_property_reply_t
+#define xcb_icccm_get_text_property_reply_wipe xcb_get_text_property_reply_wipe
+#define xcb_icccm_get_wm_class xcb_get_wm_class
+#define xcb_icccm_get_wm_class_reply xcb_get_wm_class_reply
+#define xcb_icccm_get_wm_class_reply_t xcb_get_wm_class_reply_t
+#define xcb_icccm_get_wm_class_reply_wipe xcb_get_wm_class_reply_wipe
+#define xcb_icccm_get_wm_hints xcb_get_wm_hints
+#define xcb_icccm_get_wm_hints_reply xcb_get_wm_hints_reply
#define xcb_icccm_get_wm_name xcb_get_wm_name
#define xcb_icccm_get_wm_name_reply xcb_get_wm_name_reply
+#define xcb_icccm_get_wm_normal_hints xcb_get_wm_normal_hints
+#define xcb_icccm_get_wm_normal_hints_reply xcb_get_wm_normal_hints_reply
+#define xcb_icccm_get_wm_protocols xcb_get_wm_protocols
+#define xcb_icccm_get_wm_protocols_reply xcb_get_wm_protocols_reply
+#define xcb_icccm_get_wm_protocols_reply_t xcb_get_wm_protocols_reply_t
#define xcb_icccm_get_wm_transient_for xcb_get_wm_transient_for
#define xcb_icccm_get_wm_transient_for_reply xcb_get_wm_transient_for_reply
+#define xcb_icccm_wm_hints_t xcb_wm_hints_t
#endif
/*#define SWM_DEBUG*/
#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.flags & XCB_SIZE_HINT_P_MIN_SIZE
+#define SH_MIN(w) (w)->sh.flags & XCB_ICCCM_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.flags & XCB_SIZE_HINT_P_MAX_SIZE
+#define SH_MAX(w) (w)->sh.flags & XCB_ICCCM_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.flags & XCB_SIZE_HINT_P_RESIZE_INC
+#define SH_INC(w) (w)->sh.flags & XCB_ICCCM_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)
unsigned int numlockmask = 0;
Display *display;
xcb_connection_t *conn;
+xcb_key_symbols_t *syms;
int cycle_empty = 0;
int cycle_visible = 0;
struct swm_screen *s; /* always valid, never changes */
xcb_get_geometry_reply_t *wa;
xcb_size_hints_t sh;
- xcb_get_wm_class_reply_t ch;
- xcb_wm_hints_t hints;
+ xcb_icccm_get_wm_class_reply_t ch;
+ xcb_icccm_wm_hints_t hints;
};
TAILQ_HEAD(ws_win_list, ws_win);
fake_keypress(struct ws_win *win, xcb_keysym_t keysym, uint16_t modifiers)
{
xcb_key_press_event_t event;
- xcb_key_symbols_t *syms;
xcb_keycode_t *keycode;
if (win == NULL)
return;
- syms = xcb_key_symbols_alloc(conn);
keycode = xcb_key_symbols_get_keycode(syms, keysym);
event.event = win->id;
xcb_send_event(conn, True, win->id,
XCB_EVENT_MASK_KEY_RELEASE, (char *)&event);
xcb_flush(conn);
-
- xcb_key_symbols_free(syms);
}
void
bar_extra_stop();
bar_extra = 1;
unmap_all();
+
+ xcb_key_symbols_free(syms);
xcb_flush(conn);
+ xcb_disconnect(conn);
execvp(start_argv[0], start_argv);
warn("execvp failed");
{
char *name = NULL;
xcb_get_property_cookie_t c;
- xcb_get_text_property_reply_t r;
+ xcb_icccm_get_text_property_reply_t r;
c = xcb_icccm_get_wm_name(conn, win);
if (xcb_icccm_get_wm_name_reply(conn, c, &r, NULL)) {
if (r.name_len > 0) {
name = malloc(r.name_len + 1);
if (!name) {
- xcb_get_text_property_reply_wipe(&r);
+ xcb_icccm_get_text_property_reply_wipe(&r);
return (NULL);
}
memcpy(name, r.name, r.name_len);
name[r.name_len] = '\0';
}
- xcb_get_text_property_reply_wipe(&r);
+ xcb_icccm_get_text_property_reply_wipe(&r);
}
return (name);
unsigned int i, j;
xcb_get_modifier_mapping_reply_t *modmap_r;
xcb_keycode_t *modmap, kc;
- xcb_key_symbols_t *syms;
DNPRINTF(SWM_D_MISC, "updatenumlockmask\n");
numlockmask = 0;
- syms = xcb_key_symbols_alloc(conn);
- if (!syms)
- return;
-
modmap_r = xcb_get_modifier_mapping_reply(conn,
xcb_get_modifier_mapping(conn),
NULL);
}
free(modmap_r);
}
- xcb_key_symbols_free(syms);
}
void
struct ws_win *parent, *w;
struct swm_region *r;
struct workspace *ws;
- xcb_wm_hints_t wmh;
+ xcb_icccm_wm_hints_t wmh;
parent = find_window(win->transient);
if (parent)
uint32_t event_mask;
xcb_atom_t prot;
xcb_get_property_reply_t *gpr;
- xcb_get_wm_protocols_reply_t wpr;
+ xcb_icccm_get_wm_protocols_reply_t wpr;
if ((win = find_window(id)) != NULL)
return (win); /* already being managed */
/* 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,
win->wa = xcb_get_geometry_reply(conn,
xcb_get_geometry(conn, id),
NULL);
- xcb_get_wm_normal_hints_reply(conn,
- xcb_get_wm_normal_hints(conn, id),
+ xcb_icccm_get_wm_normal_hints_reply(conn,
+ xcb_icccm_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);
- xcb_get_wm_transient_for_reply(conn,
- xcb_get_wm_transient_for(conn, id),
+ xcb_icccm_get_wm_transient_for_reply(conn,
+ xcb_icccm_get_wm_transient_for(conn, id),
&trans, NULL);
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);
+ prot = get_atom_from_string("WM_PROTOCOLS");
+
/* get supported protocols */
- if (xcb_get_wm_protocols_reply(conn,
- xcb_get_wm_protocols(conn, id, prot),
+ if (xcb_icccm_get_wm_protocols_reply(conn,
+ xcb_icccm_get_wm_protocols(conn, id, prot),
&wpr, NULL)) {
for (i = 0; i < wpr.atoms_len; i++) {
if (wpr.atoms[i] == takefocus)
if (wpr.atoms[i] == adelete)
win->can_delete = 1;
}
- xcb_get_wm_protocols_reply_wipe(&wpr);
+ xcb_icccm_get_wm_protocols_reply_wipe(&wpr);
}
win->iconic = get_iconic(win);
ewmh_autoquirk(win);
- if (xcb_get_wm_class_reply(conn,
- xcb_get_wm_class(conn, win->id),
+ if (xcb_icccm_get_wm_class_reply(conn,
+ xcb_icccm_get_wm_class(conn, win->id),
&win->ch, NULL)) {
DNPRINTF(SWM_D_CLASS, "manage_window: class: %s, name: %s\n",
win->ch.class_name, win->ch.instance_name);
if (win->wa)
free(win->wa);
- xcb_get_wm_class_reply_wipe(&win->ch);
+ xcb_icccm_get_wm_class_reply_wipe(&win->ch);
kill_refs(win);
{
XConfigureRequestEvent *ev = &e->xconfigurerequest;
struct ws_win *win;
- int new = 0;
- XWindowChanges wc;
+ int new = 0, i = 0;
+ uint16_t mask = 0;
+ uint32_t wc[7];
if ((win = find_window(ev->window)) == NULL)
if ((win = find_unmanaged_window(ev->window)) == NULL)
new = 1;
if (new) {
- bzero(&wc, sizeof wc);
- wc.x = ev->x;
- wc.y = ev->y;
- wc.width = ev->width;
- wc.height = ev->height;
- wc.border_width = ev->border_width;
- wc.sibling = ev->above;
- wc.stack_mode = ev->detail;
+ if (ev->value_mask & XCB_CONFIG_WINDOW_X) {
+ mask |= XCB_CONFIG_WINDOW_X;
+ wc[i++] = ev->x;
+ }
+ if (ev->value_mask & XCB_CONFIG_WINDOW_Y) {
+ mask |= XCB_CONFIG_WINDOW_Y;
+ wc[i++] = ev->y;
+ }
+ if (ev->value_mask & XCB_CONFIG_WINDOW_WIDTH) {
+ mask |= XCB_CONFIG_WINDOW_WIDTH;
+ wc[i++] = ev->width;
+ }
+ if (ev->value_mask & XCB_CONFIG_WINDOW_HEIGHT) {
+ mask |= XCB_CONFIG_WINDOW_HEIGHT;
+ wc[i++] = ev->height;
+ }
+ if (ev->value_mask & XCB_CONFIG_WINDOW_BORDER_WIDTH) {
+ mask |= XCB_CONFIG_WINDOW_BORDER_WIDTH;
+ wc[i++] = ev->border_width;
+ }
+ if (ev->value_mask & XCB_CONFIG_WINDOW_SIBLING) {
+ mask |= XCB_CONFIG_WINDOW_SIBLING;
+ wc[i++] = ev->above;
+ }
+ if (ev->value_mask & XCB_CONFIG_WINDOW_STACK_MODE) {
+ mask |= XCB_CONFIG_WINDOW_STACK_MODE;
+ wc[i++] = ev->detail;
+ }
DNPRINTF(SWM_D_EVENT, "configurerequest: new window: 0x%lx, "
"new: %s, (x,y) w x h: (%d,%d) %d x %d\n", ev->window,
- YESNO(new), wc.x, wc.y, wc.width, wc.height);
+ YESNO(new), wc[0], wc[1], wc[2], wc[3]);
- XConfigureWindow(display, ev->window, ev->value_mask, &wc);
+ xcb_configure_window(conn, ev->window, mask, wc);
} else if ((!win->manual || win->quirks & SWM_Q_ANYWHERE) &&
!(win->ewmh_flags & EWMH_F_FULLSCREEN)) {
win->g_float.x = ev->x - X(win->ws->r);
win = find_window(e->xconfigure.window);
if (win) {
- xcb_get_wm_normal_hints_reply(conn,
- xcb_get_wm_normal_hints(conn, win->id),
+ xcb_icccm_get_wm_normal_hints_reply(conn,
+ xcb_icccm_get_wm_normal_hints(conn, win->id),
&win->sh, NULL);
adjust_font(win);
if (font_adjusted)
if (pwd == NULL)
errx(1, "invalid user: %d", getuid());
+ syms = xcb_key_symbols_alloc(conn);
+ if (syms == NULL)
+ errx(1, "unable to allocate key symbols");
+
setup_globals();
setup_screens();
setup_keys();
if (screens[i].bar_gc != 0)
xcb_free_gc(conn, screens[i].bar_gc);
XFreeFontSet(display, bar_fs);
+
+ xcb_key_symbols_free(syms);
xcb_disconnect(conn);
return (0);