Fix the mouse menus not working with new backend, and
specifically problms in help and browser routines.


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4222 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
diff --git a/src/browser.c b/src/browser.c
index 29a37be..8c9c7a6 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -125,15 +125,9 @@
 	old_selected = selected;
 
 	kbinput = get_kbinput(edit, &meta_key, &func_key);
-	parse_browser_input(&kbinput, &meta_key, &func_key);
-        s = get_shortcut(MBROWSER, &kbinput, &meta_key, &func_key);
-        if (!s)
-            continue;
-        f = sctofunc((sc *) s);
-        if (!f)
-            break;
+
 #ifndef DISABLE_MOUSE
-        if (f->scfunc == (void *) do_mouse) {
+        if (kbinput == KEY_MOUSE) {
 
 		    int mouse_x, mouse_y;
 
@@ -164,8 +158,17 @@
 			if (old_selected == selected)
 			    unget_kbinput(NANO_ENTER_KEY, FALSE, FALSE);
 		    }
-	} else
+	}
 #endif /* !DISABLE_MOUSE */
+
+	parse_browser_input(&kbinput, &meta_key, &func_key);
+        s = get_shortcut(MBROWSER, &kbinput, &meta_key, &func_key);
+        if (!s)
+            continue;
+        f = sctofunc((sc *) s);
+        if (!f)
+            break;
+
 	if (f->scfunc == total_refresh) {
 		total_redraw();
 	} else if (f->scfunc == do_help_void) {
diff --git a/src/help.c b/src/help.c
index bcd8d8d..810899d 100644
--- a/src/help.c
+++ b/src/help.c
@@ -127,8 +127,17 @@
 	old_line = line;
 
 	kbinput = get_kbinput(edit, &meta_key, &func_key);
-	parse_help_input(&kbinput, &meta_key, &func_key);
 
+#ifndef DISABLE_MOUSE
+        if (kbinput == KEY_MOUSE) {
+		int mouse_x, mouse_y;
+		get_mouseinput(&mouse_x, &mouse_y, TRUE);
+		continue;
+	    /* Redraw the screen. */
+	}
+#endif
+
+	parse_help_input(&kbinput, &meta_key, &func_key);
         s = get_shortcut(MHELP, &kbinput, &meta_key, &func_key);
 	if (!s)
 	    continue;
@@ -136,15 +145,7 @@
 	if (!f)
 	    continue;
 
-
-        if (f->scfunc == (void *) do_mouse) {
-#ifndef DISABLE_MOUSE
-		    int mouse_x, mouse_y;
-
-		    get_mouseinput(&mouse_x, &mouse_y, TRUE);
-#endif
-	    /* Redraw the screen. */
-	} else if (f->scfunc == total_refresh) {
+	  if (f->scfunc == total_refresh) {
 		total_redraw();
 		break;
 	} else if (f->scfunc == do_page_up) {
diff --git a/src/winio.c b/src/winio.c
index 8b1e540..9e36173 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -1695,14 +1695,19 @@
 	     * we released/clicked on. */
 	    f = allfuncs;
 
-	    for (; j > 0; j--)
-                while (f != NULL && (f->menus & currmenu) != 0)
+	    for (; j > 0; j--) {
+		if (f->next != NULL)
+		    f = f->next;
+                while (f->next != NULL && (f->menus & currmenu) == 0)
 		     f = f->next;
+	    }
+
 
 	    /* And put back the equivalent key. */
 	    if (f != NULL) {
                 const sc *s = first_sc_for(currmenu, (void *) f->scfunc);
-		unget_kbinput(s->seq, s->type == META, FALSE);
+		if (s != NULL)
+		    unget_kbinput(s->seq, s->type == META, FALSE);
 	    }
 	} else
 	    /* Handle releases/clicks of the first mouse button that