Let <Esc> transfer focus from Board to ICS Input
[xboard.git] / dialogs.c
index 29003f5..f07dcf7 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -1901,6 +1901,7 @@ IcsHist (int n, Option *opt, DialogClass dlg)
     if(opt != &chatOptions[CHAT_IN] && !(opt == &chatOptions[CHAT_PARTNER] && n == 33)) return 0;
     switch(n) {
       case 33: // <Esc>
+       if(1) BoardToTop(); else
        if(hidden) BoardToTop();
        else PaneSwitch();
        break;
@@ -2094,6 +2095,7 @@ ChatProc ()
 void
 ConsoleAutoPopUp (char *buf)
 {
+       if(*buf == 27) { if(appData.icsActive && DialogExists(ChatDlg)) HardSetFocus (&chatOptions[CHAT_IN], ChatDlg); return; }
        if(!appData.autoBox) return;
        if(appData.icsActive) { // text typed to board in ICS mode: divert to ICS input box
            if(DialogExists(ChatDlg)) { // box already exists: append to current contents
@@ -2476,14 +2478,14 @@ CCB (int n)
 
 Option mainOptions[] = { // description of main window in terms of generic dialog creator
 { 0, 0xCA, 0, NULL, NULL, "", NULL, BarBegin, "" }, // menu bar
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("File") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Edit") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("View") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Mode") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Action") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Engine") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Options") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Help") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_File") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Edit") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_View") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Mode") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Action") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("E_ngine") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Options") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Help") },
 { 0, 0, 0, NULL, (void*)&SizeKludge, "", NULL, BarEnd, "" },
 { 0, LR|T2T|BORDER|SAME_ROW, 0, NULL, NULL, NULL, NULL, Label, "1" }, // optional title in window
 { 50,    LL|TT,            100, NULL, (void*) &LogoW, NULL, NULL, Skip, "" }, // white logo
@@ -2967,6 +2969,34 @@ DirSelProc (int n, int sel)
 }
 
 void
+StartDir (char *filter, char *newName)
+{
+    static char *gamesDir, *trnDir, *imgDir, *bookDir;
+    static char curDir[MSG_SIZ];
+    char **res = NULL;
+    if(!filter || !*filter) return;
+    if(strstr(filter, "pgn")) res = &gamesDir; else
+    if(strstr(filter, "bin")) res = &bookDir; else
+    if(strstr(filter, "png")) res = &imgDir; else
+    if(strstr(filter, "trn")) res = &trnDir; else
+    if(strstr(filter, "fen")) res = &appData.positionDir;
+    if(res) {
+       if(newName) {
+           char *p, *q;
+           if(*newName) {
+               ASSIGN(*res, newName);
+               for(p=*res; q=strchr(p, '/');) p = q + 1; *p = NULLCHAR;
+           }
+           if(*curDir) chdir(curDir);
+           *curDir = NULLCHAR;
+       } else {
+           getcwd(curDir, MSG_SIZ);
+           if(*res && **res) chdir(*res);
+       }
+    }
+}
+
+void
 Browse (DialogClass dlg, char *label, char *proposed, char *ext, Boolean pathFlag, char *mode, char **name, FILE **fp)
 {
     int j=0;