Make filler variant button inactive
[xboard.git] / dialogs.c
index bed4610..eea4e7c 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -444,7 +444,7 @@ static Option variantDescriptors[] = {
 { VariantShogi,  SAME_ROW, 135, NULL, (void*) &Pick, "#BFFFFF", NULL, Button, N_("shogi (9x9)")},
 { VariantSpartan,       0, 135, NULL, (void*) &Pick, "#FF0000", NULL, Button, N_("Spartan")},
 { VariantXiangqi, SAME_ROW,135, NULL, (void*) &Pick, "#BFFFFF", NULL, Button, N_("xiangqi (9x10)")},
-{ VariantNormal,        0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment
+{ -1,                   0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment
 { VariantCourier, SAME_ROW,135, NULL, (void*) &Pick, "#BFFFBF", NULL, Button, N_("courier (12x8)")},
 { 0, NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" }
 };
@@ -1167,7 +1167,8 @@ IcsKey (int n)
       case -1:
        val = NextInHistory();
     }
-    SetWidgetText(&boxOptions[0], val ? val : "", InputBoxDlg);
+    SetWidgetText(&boxOptions[0], val = val ? val : "", InputBoxDlg);
+    SetInsertPos(&boxOptions[0], strlen(val));
 }
 
 static void
@@ -1229,8 +1230,8 @@ PopUpMoveDialog (char firstchar)
 void
 BoxAutoPopUp (char *buf)
 {
+       if(!appData.autoBox) return;
        if(appData.icsActive) { // text typed to board in ICS mode: divert to ICS input box
-           if(!appData.autoBox) return;
            if(DialogExists(InputBoxDlg)) { // box already exists: append to current contents
                char *p, newText[MSG_SIZ];
                GetWidgetText(&boxOptions[0], &p);
@@ -1366,7 +1367,7 @@ ShuffleOK (int n)
 }
 
 static Option shuffleOptions[] = {
-  {   0,  0,   50, NULL, (void*) &shuffleOpenings, NULL, NULL, CheckBox, N_("shuffle") },
+  {   0,  0,    0, NULL, (void*) &shuffleOpenings, NULL, NULL, CheckBox, N_("shuffle") },
   { 0,-1,2000000000, NULL, (void*) &appData.defaultFrcPosition, "", NULL, Spin, N_("Start-position number:") },
   {   0,  0,    0, NULL, (void*) &SetRandom, NULL, NULL, Button, N_("randomize") },
   {   0,  SAME_ROW,    0, NULL, (void*) &SetRandom, NULL, NULL, Button, N_("pick fixed") },
@@ -1697,7 +1698,7 @@ ChatSwitch (int n)
 void
 ChatProc ()
 {
-    if(GenericPopUp(chatOptions, _("Chat box"), ChatDlg, BoardWindow, NONMODAL, 0))
+    if(GenericPopUp(chatOptions, _("Chat box"), ChatDlg, BoardWindow, NONMODAL, appData.topLevel))
        AddHandler(&chatOptions[0], ChatDlg, 2), AddHandler(&chatOptions[6], ChatDlg, 2); // treats return as OK
     MarkMenu("View.OpenChatWindow", ChatDlg);
 }
@@ -1874,7 +1875,7 @@ DisplayMoveError (String message)
 {
     fromX = fromY = -1;
     ClearHighlights();
-    DrawPosition(FALSE, NULL);
+    DrawPosition(TRUE, NULL); // selective redraw would miss the from-square of the rejected move, displayed empty after drag, but not marked damaged!
     if (appData.debugMode || appData.matchMode) {
        fprintf(stderr, "%s: %s\n", programName, message);
     }
@@ -2469,12 +2470,12 @@ ListDir (int pathFlag)
                ASSIGN(fileList[filePtr], s); filePtr++;
            }
        }
-       if(filePtr == MAXFILES-2) { ASSIGN(fileList[filePtr], _("\177 next page")); filePtr++; }
+       if(filePtr == MAXFILES-2) { ASSIGN(fileList[filePtr], _("  next page")); filePtr++; }
        FREE(folderList[folderPtr]); folderList[folderPtr] = NULL;
        FREE(fileList[filePtr]); fileList[filePtr] = NULL;
        closedir(dir);
        extFlag = 0;         qsort((void*)folderList, folderPtr, sizeof(char*), &Comp);
-       extFlag = byExtension; qsort((void*)fileList, filePtr, sizeof(char*), &Comp);
+       extFlag = byExtension; qsort((void*)fileList, filePtr < MAXFILES-2 ? filePtr : MAXFILES-2, sizeof(char*), &Comp);
 }
 
 void
@@ -2486,13 +2487,17 @@ Refresh (int pathFlag)
     SetWidgetLabel(&browseOptions[0], title);
 }
 
+static char msg1[] = N_("FIRST TYPE DIRECTORY NAME HERE");
+static char msg2[] = N_("TRY ANOTHER NAME");
+
 void
 CreateDir (int n)
 {
     char *name, *errmsg = "";
     GetWidgetText(&browseOptions[n-1], &name);
-    if(!name[0]) errmsg = _("FIRST TYPE DIRECTORY NAME HERE"); else
-    if(mkdir(name, 0755)) errmsg = _("TRY ANOTHER NAME");
+    if(!strcmp(name, msg1) || !strcmp(name, msg2)) return;
+    if(!name[0]) errmsg = _(msg1); else
+    if(mkdir(name, 0755)) errmsg = _(msg2);
     else {
        chdir(name);
        Refresh(-1);
@@ -2505,7 +2510,7 @@ Switch (int n)
 {
     if(byExtension == (n == 4)) return;
     extFlag = byExtension = (n == 4);
-    qsort((void*)fileList, filePtr, sizeof(char*), &Comp);
+    qsort((void*)fileList, filePtr < MAXFILES-2 ? filePtr : MAXFILES-2, sizeof(char*), &Comp);
     LoadListBox(&browseOptions[6], "", -1, -1);
 }
 
@@ -2525,7 +2530,7 @@ SetTypeFilter (int n)
 void
 FileSelProc (int n, int sel)
 {
-    if(sel<0) return;
+    if(sel < 0 || fileList[sel] == NULL) return;
     if(sel == MAXFILES-2) { pageStart = cnt; Refresh(-1); return; }
     ASSIGN(fileName, fileList[sel]);
     if(BrowseOK(0)) PopDown(BrowserDlg);