mirror of
https://github.com/vale981/spectrwm
synced 2025-03-05 09:51:38 -05:00
Get rid of a bunch of leftover Xlib events.
This commit is contained in:
parent
ca6e939864
commit
b7a93bc433
2 changed files with 35 additions and 91 deletions
2
Makefile
2
Makefile
|
@ -13,7 +13,7 @@ CFLAGS+=-std=gnu89 -Wall -Wno-uninitialized -g
|
|||
# Uncomment define below to disallow user settable clock format string
|
||||
#CFLAGS+=-DSWM_DENY_CLOCK_FORMAT
|
||||
CPPFLAGS+= -I${X11BASE}/include
|
||||
LDADD+=-lutil -L${X11BASE}/lib -lX11-xcb -lxcb-keysyms -lxcb-randr -lxcb-icccm -lXrandr -lXtst
|
||||
LDADD+=-lutil -L${X11BASE}/lib -lX11-xcb -lxcb-aux -lxcb-keysyms -lxcb-randr -lxcb-icccm -lXrandr -lXtst
|
||||
BUILDVERSION != sh "${.CURDIR}/buildver.sh"
|
||||
.if !${BUILDVERSION} == ""
|
||||
CPPFLAGS+= -DSPECTRWM_BUILDSTR=\"$(BUILDVERSION)\"
|
||||
|
|
124
spectrwm.c
124
spectrwm.c
|
@ -93,6 +93,7 @@
|
|||
#include <X11/Xlib-xcb.h>
|
||||
#include <xcb/randr.h>
|
||||
#include <xcb/xcb_atom.h>
|
||||
#include <xcb/xcb_aux.h>
|
||||
#include <xcb/xcb_event.h>
|
||||
#include <xcb/xcb_icccm.h>
|
||||
#include <xcb/xcb_keysyms.h>
|
||||
|
@ -2024,18 +2025,6 @@ bar_cleanup(struct swm_region *r)
|
|||
r->bar = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
drain_enter_notify(void)
|
||||
{
|
||||
int i = 0;
|
||||
XEvent cne;
|
||||
|
||||
while (XCheckMaskEvent(display, EnterWindowMask, &cne))
|
||||
i++;
|
||||
|
||||
DNPRINTF(SWM_D_EVENT, "drain_enter_notify: drained: %d\n", i);
|
||||
}
|
||||
|
||||
void
|
||||
set_win_state(struct ws_win *win, uint16_t state)
|
||||
{
|
||||
|
@ -2065,6 +2054,8 @@ getstate(xcb_window_t w)
|
|||
free(r);
|
||||
}
|
||||
|
||||
DNPRINTF(SWM_D_MISC, "getstate property: win 0x%x state %u\n", w,
|
||||
result);
|
||||
return (result);
|
||||
}
|
||||
|
||||
|
@ -2505,7 +2496,6 @@ validate_ws(struct workspace *testws)
|
|||
void
|
||||
unfocus_win(struct ws_win *win)
|
||||
{
|
||||
XEvent cne;
|
||||
xcb_window_t none = XCB_WINDOW_NONE;
|
||||
|
||||
DNPRINTF(SWM_D_FOCUS, "unfocus_win: window: 0x%x\n", WINID(win));
|
||||
|
@ -2540,10 +2530,6 @@ unfocus_win(struct ws_win *win)
|
|||
win->ws->focus_prev = NULL;
|
||||
}
|
||||
|
||||
/* drain all previous unfocus events */
|
||||
while (XCheckTypedEvent(display, FocusOut, &cne) == True)
|
||||
;
|
||||
|
||||
grabbuttons(win, 0);
|
||||
xcb_change_window_attributes(conn, win->id, XCB_CW_BORDER_PIXEL,
|
||||
&win->ws->r->s->c[SWM_S_COLOR_UNFOCUS].color);
|
||||
|
@ -2570,7 +2556,6 @@ unfocus_all(void)
|
|||
void
|
||||
focus_win(struct ws_win *win)
|
||||
{
|
||||
XEvent cne;
|
||||
struct ws_win *cfw = NULL;
|
||||
xcb_get_input_focus_cookie_t c;
|
||||
xcb_get_input_focus_reply_t *r;
|
||||
|
@ -2616,10 +2601,6 @@ focus_win(struct ws_win *win)
|
|||
win->ws->focus = win;
|
||||
|
||||
if (win->ws->r != NULL) {
|
||||
/* drain all previous focus events */
|
||||
while (XCheckTypedEvent(display, FocusIn, &cne) == True)
|
||||
;
|
||||
|
||||
if (win->java == 0)
|
||||
xcb_set_input_focus(conn, XCB_INPUT_FOCUS_PARENT,
|
||||
win->id, XCB_CURRENT_TIME);
|
||||
|
@ -2692,9 +2673,6 @@ switchws(struct swm_region *r, union arg *args)
|
|||
if (unmap_old)
|
||||
TAILQ_FOREACH(win, &old_ws->winlist, entry)
|
||||
unmap_window(win);
|
||||
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -3102,9 +3080,9 @@ cycle_layout(struct swm_region *r, union arg *args)
|
|||
ws->cur_layout = &layouts[0];
|
||||
|
||||
stack();
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
|
||||
a.id = SWM_ARG_ID_FOCUSCUR;
|
||||
|
||||
focus(r, &a);
|
||||
}
|
||||
|
||||
|
@ -3162,9 +3140,6 @@ stack(void) {
|
|||
if (font_adjusted)
|
||||
font_adjusted--;
|
||||
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
|
||||
DNPRINTF(SWM_D_STACK, "stack: end\n");
|
||||
}
|
||||
|
||||
|
@ -3751,8 +3726,7 @@ iconify(struct swm_region *r, union arg *args)
|
|||
unmap_window(r->ws->focus);
|
||||
update_iconic(r->ws->focus, 1);
|
||||
stack();
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
|
||||
r->ws->focus = NULL;
|
||||
a.id = SWM_ARG_ID_FOCUSCUR;
|
||||
focus(r, &a);
|
||||
|
@ -4217,8 +4191,6 @@ floating_toggle(struct swm_region *r, union arg *args)
|
|||
_NET_WM_STATE_TOGGLE);
|
||||
|
||||
stack();
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
|
||||
if (win == win->ws->focus) {
|
||||
a.id = SWM_ARG_ID_FOCUSCUR;
|
||||
|
@ -4357,9 +4329,6 @@ resize(struct ws_win *win, union arg *args)
|
|||
return;
|
||||
}
|
||||
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
|
||||
/* get cursor offset from window root */
|
||||
xpr = xcb_query_pointer_reply(conn, xcb_query_pointer(conn, win->id),
|
||||
NULL);
|
||||
|
@ -4482,9 +4451,6 @@ resize(struct ws_win *win, union arg *args)
|
|||
xcb_close_font(conn, cursor_font);
|
||||
free(gpr);
|
||||
free(xpr);
|
||||
|
||||
/* drain events */
|
||||
drain_enter_notify();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -4635,9 +4601,6 @@ move(struct ws_win *win, union arg *args)
|
|||
xcb_free_cursor(conn, cursor);
|
||||
xcb_close_font(conn, cursor_font);
|
||||
xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
|
||||
|
||||
/* drain events */
|
||||
drain_enter_notify();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -6907,8 +6870,6 @@ configurenotify(xcb_configure_notify_event_t *e)
|
|||
adjust_font(win);
|
||||
if (font_adjusted)
|
||||
stack();
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6931,15 +6892,12 @@ destroynotify(xcb_destroy_notify_event_t *e)
|
|||
|
||||
unmanage_window(win);
|
||||
stack();
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
free_window(win);
|
||||
}
|
||||
|
||||
void
|
||||
enternotify(xcb_enter_notify_event_t *e)
|
||||
{
|
||||
XEvent cne;
|
||||
struct ws_win *win;
|
||||
#if 0
|
||||
struct ws_win *w;
|
||||
|
@ -7039,18 +6997,6 @@ enternotify(xcb_enter_notify_event_t *e)
|
|||
return;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* if we have more enternotifies let them handle it in due time
|
||||
*/
|
||||
if (XCheckTypedEvent(display, EnterNotify, &cne) == True) {
|
||||
DNPRINTF(SWM_D_EVENT,
|
||||
"ignoring enternotify: got more enternotify\n");
|
||||
XPutBackEvent(display, &cne);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
focus_magic(win);
|
||||
}
|
||||
|
||||
|
@ -7202,24 +7148,9 @@ unmapnotify(xcb_unmap_notify_event_t *e)
|
|||
unmanage_window(win);
|
||||
stack();
|
||||
|
||||
/* giant hack for apps that don't destroy transient windows */
|
||||
/* eat a bunch of events to prevent remanaging the window */
|
||||
XEvent cne;
|
||||
while (XCheckWindowEvent(display, e->window,
|
||||
EnterWindowMask, &cne))
|
||||
;
|
||||
while (XCheckWindowEvent(display, e->window,
|
||||
StructureNotifyMask, &cne))
|
||||
;
|
||||
while (XCheckWindowEvent(display, e->window,
|
||||
SubstructureNotifyMask, &cne))
|
||||
;
|
||||
/* resend unmap because we ated it */
|
||||
xcb_unmap_window(conn, e->window);
|
||||
}
|
||||
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -7508,8 +7439,6 @@ screenchange(xcb_randr_screen_change_notify_event_t *e)
|
|||
TAILQ_FOREACH(r, &screens[i].rl, entry)
|
||||
bar_setup(r);
|
||||
stack();
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -7779,12 +7708,6 @@ main(int argc, char *argv[])
|
|||
if (!(display = XOpenDisplay(0)))
|
||||
errx(1, "can not open display");
|
||||
|
||||
if (!(conn = XGetXCBConnection(display)))
|
||||
errx(1, "can not get XCB connection");
|
||||
|
||||
if (active_wm())
|
||||
errx(1, "other wm running");
|
||||
|
||||
/* handle some signals */
|
||||
bzero(&sact, sizeof(sact));
|
||||
sigemptyset(&sact.sa_mask);
|
||||
|
@ -7799,6 +7722,15 @@ main(int argc, char *argv[])
|
|||
sact.sa_flags = SA_NOCLDSTOP;
|
||||
sigaction(SIGCHLD, &sact, NULL);
|
||||
|
||||
conn = XGetXCBConnection(display);
|
||||
if (xcb_connection_has_error(conn))
|
||||
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");
|
||||
|
@ -7814,9 +7746,21 @@ main(int argc, char *argv[])
|
|||
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");
|
||||
xcb_grab_server(conn);
|
||||
xcb_aux_sync(conn);
|
||||
|
||||
/* flush all events */
|
||||
while ((evt = xcb_poll_for_event(conn))) {
|
||||
uint8_t type = XCB_EVENT_RESPONSE_TYPE(evt);
|
||||
if (type == 0)
|
||||
event_handle(evt);
|
||||
free(evt);
|
||||
}
|
||||
|
||||
if (active_wm())
|
||||
errx(1, "other wm running");
|
||||
|
||||
xcb_aux_sync(conn);
|
||||
|
||||
setup_globals();
|
||||
setup_screens();
|
||||
|
@ -7882,14 +7826,14 @@ noconfig:
|
|||
bar_setup(r);
|
||||
}
|
||||
|
||||
unfocus_all();
|
||||
//unfocus_all();
|
||||
|
||||
grabkeys();
|
||||
stack();
|
||||
if (focus_mode == SWM_FOCUS_DEFAULT)
|
||||
drain_enter_notify();
|
||||
|
||||
xfd = xcb_get_file_descriptor(conn);
|
||||
xcb_ungrab_server(conn);
|
||||
xcb_flush(conn);
|
||||
|
||||
while (running) {
|
||||
while ((evt = xcb_poll_for_event(conn))) {
|
||||
if (running == 0)
|
||||
|
|
Loading…
Add table
Reference in a new issue