From: Chris Allegretta Date: Tue, 11 Mar 2008 04:52:57 +0000 (+0000) Subject: Fix the mouse menus not working with new backend, and X-Git-Tag: v2.1.0~16 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=c0b7872e2655f7c3f2838446f10148f3aa13dad0;p=nano.git 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 29a37be9..8c9c7a66 100644 --- a/src/browser.c +++ b/src/browser.c @@ -125,15 +125,9 @@ char *do_browser(char *path, DIR *dir) 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 @@ char *do_browser(char *path, DIR *dir) 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 bcd8d8db..810899d6 100644 --- a/src/help.c +++ b/src/help.c @@ -127,8 +127,17 @@ void do_help(void (*refresh_func)(void)) 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 @@ void do_help(void (*refresh_func)(void)) 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 8b1e5407..9e36173e 100644 --- a/src/winio.c +++ b/src/winio.c @@ -1695,14 +1695,19 @@ int get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts) * 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