}
void
+event_drain(uint8_t rt)
+{
+ xcb_generic_event_t *evt;
+
+ xcb_flush(conn);
+ while ((evt = xcb_poll_for_event(conn))) {
+ if (XCB_EVENT_RESPONSE_TYPE(evt) != rt)
+ event_handle(evt);
+
+ free(evt);
+ }
+}
+
+void
switchws(struct swm_region *r, union arg *args)
{
int wsid = args->id, unmap_old = 0;
TAILQ_FOREACH(win, &old_ws->winlist, entry)
unmap_window(win);
- xcb_flush(conn);
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ event_drain(XCB_ENTER_NOTIFY);
+ else
+ xcb_flush(conn);
}
void
ws->cur_layout = &layouts[0];
stack();
+ bar_update();
- a.id = SWM_ARG_ID_FOCUSCUR;
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ event_drain(XCB_ENTER_NOTIFY);
+ a.id = SWM_ARG_ID_FOCUSCUR;
focus(r, &a);
}
if (font_adjusted)
font_adjusted--;
+ if (focus_mode == SWM_FOCUS_DEFAULT)
+ event_drain(XCB_ENTER_NOTIFY);
+
DNPRINTF(SWM_D_STACK, "stack: end\n");
}
}
xcb_flush(conn);
+ event_drain(XCB_ENTER_NOTIFY);
}
void
if ((clock_format = strdup("%a %b %d %R %Z %Y")) == NULL)
err(1, "setup_globals: strdup: failed to allocate memory.");
+
+ if ((syms = xcb_key_symbols_alloc(conn)) == NULL)
+ errx(1, "unable to allocate key symbols");
+
+ astate = get_atom_from_string("WM_STATE");
+ aprot = get_atom_from_string("WM_PROTOCOLS");
+ adelete = get_atom_from_string("WM_DELETE_WINDOW");
+ takefocus = get_atom_from_string("WM_TAKE_FOCUS");
+ a_wmname = get_atom_from_string("WM_NAME");
+ a_netwmname = get_atom_from_string("_NET_WM_NAME");
+ a_utf8_string = get_atom_from_string("UTF8_STRING");
+ a_string = get_atom_from_string("STRING");
+ a_swm_iconic = get_atom_from_string("_SWM_ICONIC");
}
void
errx(1, "can not get XCB connection");
xfd = xcb_get_file_descriptor(conn);
- syms = xcb_key_symbols_alloc(conn);
- if (!syms)
- errx(1, "unable to allocate key symbols");
-
- astate = get_atom_from_string("WM_STATE");
- aprot = get_atom_from_string("WM_PROTOCOLS");
- adelete = get_atom_from_string("WM_DELETE_WINDOW");
- takefocus = get_atom_from_string("WM_TAKE_FOCUS");
- a_wmname = get_atom_from_string("WM_NAME");
- a_netwmname = get_atom_from_string("_NET_WM_NAME");
- a_utf8_string = get_atom_from_string("UTF8_STRING");
- a_string = get_atom_from_string("STRING");
- a_swm_iconic = get_atom_from_string("_SWM_ICONIC");
/* look for local and global conf file */
pwd = getpwuid(getuid());