]> git.wh0rd.org Git - nano.git/commitdiff
Finding properly also the zeroeth item from a
authorBenno Schulenberg <bensberg@justemail.net>
Wed, 16 Apr 2014 08:24:32 +0000 (08:24 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Wed, 16 Apr 2014 08:24:32 +0000 (08:24 +0000)
certain menu in the list of functions.

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4781 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/winio.c

index 965e668f909e56d7890b371bd04197a73f02c3fe..9f58a68c1c9d69be30685b04e5bc365e1ff05085 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-04-16  Benno Schulenberg  <bensberg@justemail.net>
+       * src/winio.c (get_mouseinput): Properly find also the zeroeth
+       item from a certain menu in the list of functions.  Until now
+       this accidentally worked, because "Get Help" was the very first
+       item in almost all menus.  Partly fixes Savannah bug #42093.
+
 2014-04-15  Benno Schulenberg  <bensberg@justemail.net>
        * src/nano.c (precalc_multicolorinfo): Actually set the intended
        non-blocking mode for keyboard input.
index 9d19072504bd4b925a46f1886750ad4ad74fa1fa..b334fc83d3dc2b0ca556362b98fa4e6008f4ce2c 100644 (file)
@@ -1690,29 +1690,35 @@ int get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts)
            /* Adjust j if we released on the last two shortcuts. */
            if ((j >= currslen) && (*mouse_x % i < COLS % i))
                j -= 2;
-
+#ifdef DEBUG
+           fprintf(stderr, "Calculated %i as index in shortcut list, currmenu = %x.\n", j, currmenu);
+#endif
            /* Ignore releases/clicks of the first mouse button beyond
             * the last shortcut. */
            if (j >= currslen)
                return 2;
 
-           /* Go through the shortcut list to determine which shortcut
-            * we released/clicked on. */
+           /* Go through the list of functions to determine which
+            * shortcut in the current menu we released/clicked on. */
            f = allfuncs;
 
-           for (; j > 0; j--) {
-               if (f->next != NULL)
-                   f = f->next;
-
-                while (f->next != NULL && ((f->menus & currmenu) == 0
+           while (TRUE) {
+               while ((f->menus & currmenu) == 0
 #ifndef DISABLE_HELP
-                       || strlen(f->help) == 0
+                       || strlen(f->help) == 0
 #endif
-               ))
-                    f = f->next;
+                       )
+                   f = f->next;
+               if (j == 0)
+                   break;
+               f = f->next;
+               j -= 1;
            }
+#ifdef DEBUG
+           fprintf(stderr, "Stopped on func %ld present in menus %x\n", f->scfunc, f->menus);
+#endif
 
-           /* And put back the equivalent key. */
+           /* And put the corresponding key into the keyboard buffer. */
            if (f != NULL) {
                 const sc *s = first_sc_for(currmenu, f->scfunc);
                if (s != NULL)
@@ -1769,7 +1775,7 @@ const sc *get_shortcut(int menu, int *kbinput, bool *meta_key)
     sc *s;
 
 #ifdef DEBUG
-    fprintf(stderr, "get_shortcut(): kbinput = %d, meta_key = %s", *kbinput, *meta_key ? "TRUE" : "FALSE");
+    fprintf(stderr, "get_shortcut(): kbinput = %d, meta_key = %s -- ", *kbinput, *meta_key ? "TRUE" : "FALSE");
 #endif
 
     /* Check for shortcuts. */