From c884a8ede0189efae770501fa9abbc837f6d6464 Mon Sep 17 00:00:00 2001 From: oga Date: Sat, 17 Jan 2009 18:41:50 +0000 Subject: Finally fix the really annoying race where if you rapidly switch groups several times you'd end up losing clients (thinking they had gone away). From the ICCCM (which should not be read without a stiff drink in hand, I made this mistake so you don't have to): to request a window to be withdrawn one should send a synthetic UnmapRequest event when iconified. To request iconification one should just unmap the window. The ICCM further recommends that the synthetic event should just be taken as a cue to withdraw, to deal with legacy clients. Taking a hint from this, rework xev_handle_unmaprequest to correctly detect these situations. A Withdrawn window may come back anywhere, even as a subwindow of something else, so the correct way to handle this state is to forget it ever existed. While i'm here, kill a dumb attempt to notice this in client_delete, and nuke the very unnecessary arguments. Todd confirmed this fixes the `race'. ok todd@, ok ok okan@ --- calmwm.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'calmwm.h') diff --git a/calmwm.h b/calmwm.h index 4bda7bc..b13187a 100644 --- a/calmwm.h +++ b/calmwm.h @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $Id: calmwm.h,v 1.74 2009/01/16 15:24:14 okan Exp $ + * $Id: calmwm.h,v 1.75 2009/01/17 18:41:50 oga Exp $ */ #ifndef _CALMWM_H_ @@ -310,7 +310,7 @@ __dead void usage(void); struct client_ctx *client_find(Window); void client_setup(void); struct client_ctx *client_new(Window, struct screen_ctx *, int); -int client_delete(struct client_ctx *, int, int); +int client_delete(struct client_ctx *); void client_setactive(struct client_ctx *, int); void client_resize(struct client_ctx *); void client_lower(struct client_ctx *); -- cgit v1.2.3-2-gb3c3