Implement -positionDir option GTK
authorH.G.Muller <hgm@hgm-xboard.(none)>
Sat, 20 Dec 2014 19:47:05 +0000 (20:47 +0100)
committerArun Persaud <arun@nubati.net>
Fri, 8 May 2015 14:49:16 +0000 (07:49 -0700)
This volatile option determines where Load Position starts browsing.

args.h
common.h
gtk/xboard.c
menus.c

diff --git a/args.h b/args.h
index 1ceb1a4..8e824a5 100644 (file)
--- a/args.h
+++ b/args.h
@@ -283,6 +283,7 @@ ArgDescriptor argDescriptors[] = {
   { "lpf", ArgFilename, (void *) &appData.loadPositionFile, FALSE, INVALID },
   { "loadPositionIndex", ArgInt, (void *) &appData.loadPositionIndex, FALSE, (ArgIniType) 1 },
   { "lpi", ArgInt, (void *) &appData.loadPositionIndex, FALSE, INVALID },
   { "lpf", ArgFilename, (void *) &appData.loadPositionFile, FALSE, INVALID },
   { "loadPositionIndex", ArgInt, (void *) &appData.loadPositionIndex, FALSE, (ArgIniType) 1 },
   { "lpi", ArgInt, (void *) &appData.loadPositionIndex, FALSE, INVALID },
+  { "positionDir", ArgFilename, (void *) &appData.positionDir, FALSE, (ArgIniType) "" },
   { "savePositionFile", ArgFilename, (void *) &appData.savePositionFile, FALSE, (ArgIniType) "" },
   { "spf", ArgFilename, (void *) &appData.savePositionFile, FALSE, INVALID },
   { "matchMode", ArgBoolean, (void *) &appData.matchMode, FALSE, (ArgIniType) FALSE },
   { "savePositionFile", ArgFilename, (void *) &appData.savePositionFile, FALSE, (ArgIniType) "" },
   { "spf", ArgFilename, (void *) &appData.savePositionFile, FALSE, INVALID },
   { "matchMode", ArgBoolean, (void *) &appData.matchMode, FALSE, (ArgIniType) FALSE },
index 2b0ddf0..b271821 100644 (file)
--- a/common.h
+++ b/common.h
@@ -486,6 +486,7 @@ typedef struct {
     char *pgnName[ENGINES];
     Boolean firstPlaysBlack;
     Boolean noChessProgram;
     char *pgnName[ENGINES];
     Boolean firstPlaysBlack;
     Boolean noChessProgram;
+    char *positionDir;
     char *host[ENGINES];
     char *themeNames;
     char *pieceDirectory;
     char *host[ENGINES];
     char *themeNames;
     char *pieceDirectory;
index 8a2b887..ef35f2a 100644 (file)
@@ -2317,6 +2317,12 @@ void FileNamePopUpWrapper(label, def, filter, proc, pathFlag, openMode, name, fp
   char fileext[10] = "";
   char *result     = NULL;
   char *cp;
   char fileext[10] = "";
   char *result     = NULL;
   char *cp;
+  char curDir[MSG_SIZ];
+
+  if(def && *def && def[strlen(def)-1] == '/') {
+    getcwd(curDir, MSG_SIZ);
+    chdir(def);
+  }
 
   /* make a copy of the filter string, so that strtok can work with it*/
   cp = strdup(filter);
 
   /* make a copy of the filter string, so that strtok can work with it*/
   cp = strdup(filter);
@@ -2396,6 +2402,8 @@ void FileNamePopUpWrapper(label, def, filter, proc, pathFlag, openMode, name, fp
   gtk_widget_destroy (dialog);
   ModeHighlight();
 
   gtk_widget_destroy (dialog);
   ModeHighlight();
 
+  if(def && *def && def[strlen(def)-1] == '/') chdir(curDir);
+
   free(cp);
   return;
 
   free(cp);
   return;
 
diff --git a/menus.c b/menus.c
index 086c9b4..653d978 100644 (file)
--- a/menus.c
+++ b/menus.c
@@ -173,10 +173,12 @@ ReloadPositionProc ()
 void
 LoadPositionProc()
 {
 void
 LoadPositionProc()
 {
+    static char buf[MSG_SIZ];
     if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
        Reset(FALSE, TRUE);
     }
     if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
        Reset(FALSE, TRUE);
     }
-    FileNamePopUp(_("Load position file name?"), "", ".fen .epd .pos", LoadPosition, "rb");
+    snprintf(buf, MSG_SIZ, "%s/", appData.positionDir);
+    FileNamePopUp(_("Load position file name?"), buf, ".fen .epd .pos", LoadPosition, "rb");
 }
 
 void
 }
 
 void