Fix crash reported by Andrey.

Make focus-follows-mouse easier to find for
those who want it (cough, Ron Minnich, cough).
diff --git a/src/cmd/rio/dat.h b/src/cmd/rio/dat.h
index b2b74ee..aa08fcf 100644
--- a/src/cmd/rio/dat.h
+++ b/src/cmd/rio/dat.h
@@ -150,6 +150,7 @@
 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 4564277..457153d 100644
--- a/src/cmd/rio/event.c
+++ b/src/cmd/rio/event.c
@@ -282,6 +282,7 @@
 void
 destroy(Window w)
 {
+	int i;
 	Client *c;
 
 	curtime = CurrentTime;
@@ -289,6 +290,11 @@
 	if(c == 0)
 		return;
 
+	if(numvirtuals > 1)
+		for(i=0; i<numvirtuals; i++)
+			if(currents[i] == c)
+				currents[i] = 0;
+
 	rmclient(c);
 
 	/* flush any errors generated by the window's sudden demise */
@@ -470,12 +476,14 @@
 	Client *c;
 
 	curtime = e->time;
+	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 bc43a99..d20c3a0 100644
--- a/src/cmd/rio/main.c
+++ b/src/cmd/rio/main.c
@@ -40,6 +40,7 @@
 int 			num_screens;
 int			solidsweep = 0;
 int			numvirtuals = 0;
+int			ffm = 0;
 
 Atom		exit_rio;
 Atom		restart_rio;
@@ -95,6 +96,10 @@
 			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+1<argc){
 			i++;
 			fname = argv[i];
@@ -335,8 +340,8 @@
 	attr.cursor = s->arrow;
 	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 21195d2..eb92b74 100644
--- a/src/cmd/rio/menu.c
+++ b/src/cmd/rio/menu.c
@@ -319,7 +319,7 @@
 	}
 
 	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 @@
 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 @@
 		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);