From d52fb463eeda2168b7b0135d758a1e2a57be9af7 Mon Sep 17 00:00:00 2001 From: rsc Date: Thu, 11 Aug 2005 03:38:16 +0000 Subject: Fix crash reported by Andrey. Make focus-follows-mouse easier to find for those who want it (cough, Ron Minnich, cough). --- src/cmd/rio/dat.h | 1 + src/cmd/rio/event.c | 10 +++++++++- src/cmd/rio/main.c | 9 +++++++-- src/cmd/rio/menu.c | 13 ++++++++----- 4 files changed, 25 insertions(+), 8 deletions(-) (limited to 'src/cmd/rio') diff --git a/src/cmd/rio/dat.h b/src/cmd/rio/dat.h index b2b74eea..aa08fcf9 100644 --- a/src/cmd/rio/dat.h +++ b/src/cmd/rio/dat.h @@ -150,6 +150,7 @@ extern int debug; extern int solidsweep; extern int numvirtuals; extern int scrolling; +extern int ffm; /* focus follows mouse */ extern Atom exit_rio; extern Atom restart_rio; diff --git a/src/cmd/rio/event.c b/src/cmd/rio/event.c index 45642774..457153df 100644 --- a/src/cmd/rio/event.c +++ b/src/cmd/rio/event.c @@ -282,6 +282,7 @@ newwindow(XCreateWindowEvent *e) void destroy(Window w) { + int i; Client *c; curtime = CurrentTime; @@ -289,6 +290,11 @@ destroy(Window w) if(c == 0) return; + if(numvirtuals > 1) + for(i=0; itime; + if(!ffm) if(e->mode != NotifyGrab || e->detail != NotifyNonlinearVirtual) return; c = getclient(e->window, 0); if(c != 0 && c != current){ /* someone grabbed the pointer; make them current */ - XMapRaised(dpy, c->parent); + if(!ffm) + XMapRaised(dpy, c->parent); top(c); active(c); } diff --git a/src/cmd/rio/main.c b/src/cmd/rio/main.c index bc43a99f..d20c3a00 100644 --- a/src/cmd/rio/main.c +++ b/src/cmd/rio/main.c @@ -40,6 +40,7 @@ int scrolling; int num_screens; int solidsweep = 0; int numvirtuals = 0; +int ffm = 0; Atom exit_rio; Atom restart_rio; @@ -95,6 +96,10 @@ main(int argc, char *argv[]) background = 1; else if(strcmp(argv[i], "-debug") == 0) debug++; + /* + else if(strcmp(argv[i], "-ffm") == 0) + ffm++; + */ else if(strcmp(argv[i], "-font") == 0 && i+1arrow; attr.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | ColormapChangeMask - | ButtonPressMask | ButtonReleaseMask | PropertyChangeMask | - KeyPressMask; + | ButtonPressMask | ButtonReleaseMask | PropertyChangeMask + | KeyPressMask | EnterWindowMask; mask = CWCursor|CWEventMask; XChangeWindowAttributes(dpy, s->root, mask, &attr); XSync(dpy, False); diff --git a/src/cmd/rio/menu.c b/src/cmd/rio/menu.c index 21195d2e..eb92b744 100644 --- a/src/cmd/rio/menu.c +++ b/src/cmd/rio/menu.c @@ -319,7 +319,7 @@ unhide(int n, int map) } numhidden--; - for(i = n; i < numhidden; i ++){ + for(i = n; i < numhidden; i++){ hiddenc[i] = hiddenc[i+1]; b3items[B3FIXED+i] = b3items[B3FIXED+i+1]; } @@ -368,8 +368,11 @@ button2(int n) void switch_to_c(int n, Client *c) { - if(c && c->next) - switch_to_c(n,c->next); + if(c == 0) + return; + + if(c->next) + switch_to_c(n, c->next); if(c->parent == DefaultRootWindow(dpy)) return; @@ -384,8 +387,8 @@ switch_to_c(int n, Client *c) int i; for(i = 0; i < numhidden; i++) - if(c == hiddenc[i]) - break; + if(c == hiddenc[i]) + break; if(i == numhidden){ XMapWindow(dpy, c->window); -- cgit v1.2.3