XCB_CONFIG_WINDOW_STACK_MODE, &val);
xcb_map_window(conn, win);
- xcb_flush(conn);
}
xcb_atom_t
void
ewmh_autoquirk(struct ws_win *win)
{
- int i;
- unsigned long n;
- xcb_atom_t type;
+ uint32_t i, n;
+ xcb_atom_t *type;
xcb_get_property_cookie_t c;
xcb_get_property_reply_t *r;
c = xcb_get_property(conn, False, win->id,
- ewmh[_NET_WM_WINDOW_TYPE].atom, XCB_ATOM_ATOM, 0, (~0L));
+ ewmh[_NET_WM_WINDOW_TYPE].atom, XCB_ATOM_ATOM, 0, UINT32_MAX);
r = xcb_get_property_reply(conn, c, NULL);
if (!r)
return;
- n = xcb_get_property_value_length(r);
+ n = xcb_get_property_value_length(r);
+ type = xcb_get_property_value(r);
+
for (i = 0; i < n; i++) {
- type = *((xcb_atom_t *)xcb_get_property_value(r));
- if (type == ewmh[_NET_WM_WINDOW_TYPE_NORMAL].atom)
+ if (type[i] == ewmh[_NET_WM_WINDOW_TYPE_NORMAL].atom)
break;
- if (type == ewmh[_NET_WM_WINDOW_TYPE_DOCK].atom ||
- type == ewmh[_NET_WM_WINDOW_TYPE_TOOLBAR].atom ||
- type == ewmh[_NET_WM_WINDOW_TYPE_UTILITY].atom) {
+ if (type[i] == ewmh[_NET_WM_WINDOW_TYPE_DOCK].atom ||
+ type[i] == ewmh[_NET_WM_WINDOW_TYPE_TOOLBAR].atom ||
+ type[i] == ewmh[_NET_WM_WINDOW_TYPE_UTILITY].atom) {
win->floating = 1;
win->quirks = SWM_Q_FLOAT | SWM_Q_ANYWHERE;
break;
}
- if (type == ewmh[_NET_WM_WINDOW_TYPE_SPLASH].atom ||
- type == ewmh[_NET_WM_WINDOW_TYPE_DIALOG].atom) {
+ if (type[i] == ewmh[_NET_WM_WINDOW_TYPE_SPLASH].atom ||
+ type[i] == ewmh[_NET_WM_WINDOW_TYPE_DIALOG].atom) {
win->floating = 1;
win->quirks = SWM_Q_FLOAT;
break;
void maprequest(xcb_map_request_event_t *);
void propertynotify(xcb_property_notify_event_t *);
void unmapnotify(xcb_unmap_notify_event_t *);
-void visibilitynotify(xcb_visibility_notify_event_t *);
+/*void visibilitynotify(xcb_visibility_notify_event_t *);*/
void clientmessage(xcb_client_message_event_t *);
void screenchange(xcb_randr_screen_change_notify_event_t *);
stack();
/* must be after stack */
bar_update();
+
+ xcb_flush(conn);
}
void
else
strlcpy(bar_vertext, "", sizeof bar_vertext);
bar_update();
+
+ xcb_flush(conn);
}
void
if (unmap_old)
TAILQ_FOREACH(win, &old_ws->winlist, entry)
unmap_window(win);
+
+ xcb_flush(conn);
}
void
sort_windows(wl);
stack();
+
+ xcb_flush(conn);
}
void
}
focus_magic(winfocus);
+
+ xcb_flush(conn);
}
void
stack();
bar_update();
+
+ xcb_flush(conn);
}
void
/* bring floaters back to top */
if (r->ws->always_raise == 0)
stack();
+
+ xcb_flush(conn);
}
void
r->ws->focus = NULL;
a.id = SWM_ARG_ID_FOCUSCUR;
focus(r, &a);
+
+ xcb_flush(conn);
}
char *
}
fclose(lfile);
+ xcb_flush(conn);
}
void
}
fclose(lfile);
+
+ xcb_flush(conn);
}
void
else
if (r->ws->focus->can_delete)
client_msg(r->ws->focus, adelete);
+
+ xcb_flush(conn);
}
a.id = SWM_ARG_ID_FOCUSCUR;
focus(win->ws->r, &a);
}
+
+ xcb_flush(conn);
}
void
struct swm_region *r = NULL;
int resize_step = 0;
struct swm_geometry g;
- int top = 0, left = 0, buttonrelease;
+ int top = 0, left = 0, resizing;
int dx, dy;
unsigned int shape; /* cursor style */
xcb_cursor_t cursor;
if (win->ewmh_flags & EWMH_F_FULLSCREEN)
return;
- DNPRINTF(SWM_D_MOUSE, "resize: window: 0x%x, floating: %s, "
+ DNPRINTF(SWM_D_EVENT, "resize: window: 0x%x, floating: %s, "
"transient: 0x%x\n", win->id, YESNO(win->floating),
win->transient);
}
xcb_flush(conn);
- buttonrelease = 0;
- while ((evt = xcb_poll_for_event(conn)) && buttonrelease != 1) {
+ resizing = 1;
+ while ((evt = xcb_wait_for_event(conn)) && resizing) {
/*
XMaskEvent(display, MOUSEMASK | ExposureMask |
SubstructureRedirectMask, &ev);
*/
switch (XCB_EVENT_RESPONSE_TYPE(evt)) {
case XCB_BUTTON_RELEASE:
- buttonrelease = 1;
+ DNPRINTF(SWM_D_EVENT, "resize: BUTTON_RELEASE\n");
+ resizing = 0;
break;
case XCB_MOTION_NOTIFY:
mne = (xcb_motion_notify_event_t *)evt;
xcb_close_font(conn, cursor_font);
free(gpr);
free(xpr);
+ DNPRINTF(SWM_D_EVENT, "resize: done\n");
}
void
move(struct ws_win *win, union arg *args)
{
xcb_timestamp_t timestamp = 0;
- int move_step = 0, buttonrelease;
+ int move_step = 0, moving;
struct swm_region *r = NULL;
xcb_font_t cursor_font;
xcb_cursor_t cursor;
if (win->ewmh_flags & EWMH_F_FULLSCREEN)
return;
- DNPRINTF(SWM_D_MOUSE, "move: window: 0x%x, floating: %s, transient: "
+ DNPRINTF(SWM_D_EVENT, "move: window: 0x%x, floating: %s, transient: "
"0x%x\n", win->id, YESNO(win->floating), win->transient);
/* in max_stack mode should only move transients */
}
xcb_flush(conn);
- buttonrelease = 0;
- while ((evt = xcb_poll_for_event(conn)) && buttonrelease != 1) {
- /*
- XMaskEvent(display, MOUSEMASK | ExposureMask |
- SubstructureRedirectMask, &ev);
- */
+ moving = 1;
+ while ((evt = xcb_wait_for_event(conn)) && moving) {
switch (XCB_EVENT_RESPONSE_TYPE(evt)) {
case XCB_BUTTON_RELEASE:
- buttonrelease = 1;
+ DNPRINTF(SWM_D_EVENT, "move: BUTTON_RELEASE\n");
+ moving = 0;
break;
case XCB_MOTION_NOTIFY:
mne = (xcb_motion_notify_event_t *)evt;
xcb_free_cursor(conn, cursor);
xcb_close_font(conn, cursor_font);
xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
+ DNPRINTF(SWM_D_EVENT, "move: done\n");
}
void
struct ws_win *win;
int i, action;
- DNPRINTF(SWM_D_EVENT, "buttonpress: window 0x%x\n", e->event);
+ DNPRINTF(SWM_D_EVENT, "buttonpress: window 0x%x, detail: %u\n",
+ e->event, e->detail);
if ((win = find_window(e->event)) == NULL)
return;
/* resend unmap because we ated it */
xcb_unmap_window(conn, e->window);
+ xcb_flush(conn);
}
}
-void
+/*void
visibilitynotify(xcb_visibility_notify_event_t *e)
{
- int i, num_screens;
- struct swm_region *r;
-
DNPRINTF(SWM_D_EVENT, "visibilitynotify: window: 0x%x\n",
e->window);
-
- if (e->state == XCB_VISIBILITY_UNOBSCURED) {
- 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 (e->window == WINID(r->bar))
- bar_update();
- }
-}
+}*/
void
clientmessage(xcb_client_message_event_t *e)
event_handle(xcb_generic_event_t *evt)
{
uint8_t type = XCB_EVENT_RESPONSE_TYPE(evt);
+
+ DNPRINTF(SWM_D_EVENT, "XCB Event: %s(%d)\n",
+ xcb_event_get_label(XCB_EVENT_RESPONSE_TYPE(evt)),
+ XCB_EVENT_RESPONSE_TYPE(evt));
+
switch (type) {
#define EVENT(type, callback) case type: callback((void *)evt); return
EVENT(0, event_error);
/*EVENT(XCB_SELECTION_NOTIFY, );*/
/*EVENT(XCB_SELECTION_REQUEST, );*/
EVENT(XCB_UNMAP_NOTIFY, unmapnotify);
- EVENT(XCB_VISIBILITY_NOTIFY, visibilitynotify);
+ /*EVENT(XCB_VISIBILITY_NOTIFY, visibilitynotify);*/
#undef EVENT
}
if (type - xrandr_eventbase == XCB_RANDR_SCREEN_CHANGE_NOTIFY)
/* flush all events */
while ((evt = xcb_poll_for_event(conn))) {
- uint8_t type = XCB_EVENT_RESPONSE_TYPE(evt);
- if (type == 0)
+ if (XCB_EVENT_RESPONSE_TYPE(evt) == 0)
event_handle(evt);
free(evt);
}
while (running) {
while ((evt = xcb_poll_for_event(conn))) {
- DNPRINTF(SWM_D_EVENT, "XCB Event: %s(%d)\n",
- xcb_event_get_label(XCB_EVENT_RESPONSE_TYPE(evt)),
- XCB_EVENT_RESPONSE_TYPE(evt));
if (running == 0)
goto done;
event_handle(evt);