X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xaw%2Fxboard.c;h=f90fe06f4527532f0de0426deff816bea71a0478;hb=3f31332aa191fe791d4248dd9fa28c3631a3c78d;hp=17a9752f63d6cc3816e32567d8f2b419b41842fb;hpb=63dc09b62c3a6430c671b8fd5ebd4be691167173;p=xboard.git diff --git a/xaw/xboard.c b/xaw/xboard.c index 17a9752..f90fe06 100644 --- a/xaw/xboard.c +++ b/xaw/xboard.c @@ -844,17 +844,18 @@ char * GenerateGlobalTranslationTable (void) { /* go through all menu items and extract the keyboard shortcuts, so that X11 can load them */ - char *output; + char *output[2]; - int i,j; + int i,j,n=0; MenuItem *mi; - output = strdup(""); + output[0] = strdup(""); // build keystrokes with and wo mod keys separately + output[1] = strdup(""); // so the more specific can preceed the other /* loop over all menu entries */ - for( i=0; menuBar[i].mi ; i++) + for( i=0; menuBar[i-n].mi || !n++; i++) { - mi = menuBar[i].mi; + mi = menuBar[i+n].mi; // kludge to access 'noMenu' behind sentinel for(j=0; mi[j].proc; j++) { if (mi[j].accel) @@ -919,17 +920,16 @@ GenerateGlobalTranslationTable (void) mods[strlen(mods)-1]='\0'; /* get the name for the callback, we can use MenuItem() here that will call KeyBindingProc */ - size_t namesize = snprintf(NULL, 0, "%s.%s", menuBar[i].ref, mi[j].ref); - char *name = malloc(namesize+1); - snprintf(name, namesize+1, "%s.%s", menuBar[i].ref, mi[j].ref); + char *name = malloc(MSG_SIZ); + if(n) snprintf(name, MSG_SIZ, "%s", mi[j].ref); + else snprintf(name, MSG_SIZ, "%s.%s", menuBar[i].ref, mi[j].ref); - size_t buffersize = snprintf(NULL, 0, ":%s%s: MenuItem(%s) \n ", mods, key, name); - char *buffer = malloc(buffersize+1); - snprintf(buffer, buffersize+1, ":%s%s: MenuItem(%s) \n ", mods, key, name); + char *buffer = malloc(MSG_SIZ); + snprintf(buffer, MSG_SIZ, ":%s%s: MenuItem(%s) \n ", mods, key, name); /* add string to the output */ - output = realloc(output, strlen(output) + strlen(buffer)+1); - strncat(output, buffer, strlen(buffer)); + output[shift|alt|ctrl] = realloc(output[shift|alt|ctrl], strlen(output[shift|alt|ctrl]) + strlen(buffer)+1); + strncat(output[shift|alt|ctrl], buffer, strlen(buffer)); /* clean up */ free(key); @@ -939,7 +939,10 @@ GenerateGlobalTranslationTable (void) } } } - return output; + output[1] = realloc(output[1], strlen(output[1]) + strlen(output[0])+1); + strncat(output[1], output[0], strlen(output[0])); + free(output[0]); + return output[1]; }