Fix linegap option in board dialog
[xboard.git] / filebrowser / selfile.c
index 860ed8b..2e34955 100644 (file)
@@ -139,6 +139,8 @@ XtIntervalId SFdirModTimerId;
 
 int (*SFfunc)();
 
+Boolean SFpathFlag; // [HGM]
+
 static char *oneLineTextEditTranslations = "\
        <Key>Return:    redraw-display()\n\
        Ctrl<Key>M:     redraw-display()\n\
@@ -156,7 +158,7 @@ SFexposeList(w, n, event, cont)
                return;
        }
 
-       SFdrawList((int)n, SF_DO_NOT_SCROLL);
+       SFdrawList((int)(intptr_t)n, SF_DO_NOT_SCROLL);
 }
 
 /* ARGSUSED */
@@ -428,9 +430,9 @@ SFcreateWidgets(toplevel, prompt, ok, cancel)
                        scrollbarWidgetClass, selFileLists[n], arglist, i);
 
                XtAddCallback(selFileVScrolls[n], XtNjumpProc,
-                       SFvFloatSliderMovedCallback, (XtPointer) n);
+                       SFvFloatSliderMovedCallback, (XtPointer)(intptr_t) n);
                XtAddCallback(selFileVScrolls[n], XtNscrollProc,
-                       SFvAreaSelectedCallback, (XtPointer) n);
+                       SFvAreaSelectedCallback, (XtPointer)(intptr_t) n);
 
                i = 0;
 
@@ -445,9 +447,9 @@ SFcreateWidgets(toplevel, prompt, ok, cancel)
                        scrollbarWidgetClass, selFileLists[n], arglist, i);
 
                XtAddCallback(selFileHScrolls[n], XtNjumpProc,
-                       SFhSliderMovedCallback, (XtPointer) n);
+                       SFhSliderMovedCallback, (XtPointer)(intptr_t) n);
                XtAddCallback(selFileHScrolls[n], XtNscrollProc,
-                       SFhAreaSelectedCallback, (XtPointer) n);
+                       SFhAreaSelectedCallback, (XtPointer)(intptr_t) n);
        }
 
        i = 0;
@@ -506,17 +508,17 @@ SFcreateWidgets(toplevel, prompt, ok, cancel)
 
        for (n = 0; n < NR; n++) {
                XtAddEventHandler(selFileLists[n], ExposureMask, True,
-                       SFexposeList, (XtPointer) n);
+                       SFexposeList, (XtPointer)(intptr_t) n);
                XtAddEventHandler(selFileLists[n], EnterWindowMask, False,
-                       SFenterList, (XtPointer) n);
+                       SFenterList, (XtPointer)(intptr_t) n);
                XtAddEventHandler(selFileLists[n], LeaveWindowMask, False,
-                       SFleaveList, (XtPointer) n);
+                       SFleaveList, (XtPointer)(intptr_t) n);
                XtAddEventHandler(selFileLists[n], PointerMotionMask, False,
-                       SFmotionList, (XtPointer) n);
+                       SFmotionList, (XtPointer)(intptr_t) n);
                XtAddEventHandler(selFileLists[n], ButtonPressMask, False,
-                       SFbuttonPressList, (XtPointer) n);
+                       SFbuttonPressList, (XtPointer)(intptr_t) n);
                XtAddEventHandler(selFileLists[n], ButtonReleaseMask, False,
-                       SFbuttonReleaseList, (XtPointer) n);
+                       SFbuttonReleaseList, (XtPointer)(intptr_t) n);
        }
 
        XtAddEventHandler(selFileField, KeyPressMask, False,
@@ -676,6 +678,12 @@ XsraSelFile(toplevel, prompt, ok, cancel, failed,
                cancel = "Cancel";
        }
 
+       if(SFpathFlag != (mode && mode[0] == 'p')) { // [HGM] ignore everything that is not a directory
+               if(SFdirs) XtFree(SFdirs);
+               SFdirs = NULL; // kludge to throw away all cached info
+               SFpathFlag = !SFpathFlag;
+       }
+
        if (firstTime) {
                firstTime = 0;
                SFdisplay = XtDisplay(toplevel);
@@ -749,6 +757,10 @@ XsraSelFile(toplevel, prompt, ok, cancel, failed,
                        break;
                case SEL_FILE_OK:
                        *name_return = SFgetText();
+                       if(mode && (mode[0] == 'p' || mode[0] == 'f')) { // [HGM] for use in file-option browse button
+                               SFprepareToReturn();
+                               return stderr;
+                       }
                        if (fp = SFopenFile(*name_return, mode,
                                            prompt, failed)) {
                                SFprepareToReturn();