Improve Tournament dialog layout WB
[xboard.git] / filebrowser / selfile.c
index 477b022..3a597b0 100644 (file)
@@ -60,17 +60,8 @@ extern int errno;
 #include <X11/Xaw/Label.h>
 #include <X11/Xaw/Cardinals.h>
 
-#include "selfile.h"
 #include "xstat.h"
-
-/* added missing prototypes */
-extern void SFdrawList(int,int);
-extern void SFinitFont();
-extern void SFcreateGC();
-extern int SFchdir(char *);
-extern void SFupdatePath();
-extern void SFsetText(char *);
-extern char SFstatChar(struct stat*);
+#include "selfile.h"
 
 #ifndef MAXPATHLEN
 #define MAXPATHLEN 1024
@@ -267,6 +258,14 @@ void SFsetFocus(Widget w, XtPointer data, XEvent *event, Boolean *b)
     XtSetKeyboardFocus((Widget) data, w);
 }
 
+void SFwheelProc(Widget w, XtPointer data, XEvent *event, Boolean *b)
+{   // [HGM] mouse-wheel callback scrolls lists
+    int dir, n = (intptr_t) data;
+    if(event->xbutton.button == Button4) dir = -2; // kludge to indicate relative motion
+    if(event->xbutton.button == Button5) dir = -1;
+    SFvSliderMovedCallback(w, n, dir);
+}
+
 static void
 SFcreateWidgets(toplevel, prompt, ok, cancel)
        Widget  toplevel;
@@ -522,6 +521,9 @@ SFcreateWidgets(toplevel, prompt, ok, cancel)
                        SFhSliderMovedCallback, (XtPointer)(intptr_t) n);
                XtAddCallback(selFileHScrolls[n], XtNscrollProc,
                        SFhAreaSelectedCallback, (XtPointer)(intptr_t) n);
+
+               XtAddEventHandler(selFileVScrolls[n], ButtonPressMask, False,
+                       SFwheelProc, (XtPointer)(intptr_t) n); // [HGM] couplemouse wheel to v-scroll
        }
 
        i = 0;
@@ -587,7 +589,7 @@ SFcreateWidgets(toplevel, prompt, ok, cancel)
                XtAddEventHandler(selFileLists[n], LeaveWindowMask, False,
                        SFleaveList, (XtPointer)(intptr_t) n);
                XtAddEventHandler(selFileLists[n], PointerMotionMask, False,
-                       SFmotionList, (XtPointer)(intptr_t) n);
+                       (XtEventHandler) SFmotionList, (XtPointer)(intptr_t) n);
                XtAddEventHandler(selFileLists[n], ButtonPressMask, False,
                        SFbuttonPressList, (XtPointer)(intptr_t) n);
                XtAddEventHandler(selFileLists[n], ButtonReleaseMask, False,
@@ -783,8 +785,8 @@ XsraSelFile(toplevel, prompt, ok, cancel, failed,
        XtSetArg(arglist[i], XtNstring, filter);                        i++;
        XtSetValues(filterField, arglist, i);
 
-       safeStrCpy(SFfilterBuffer, filter, MAXPATHLEN);
-       safeStrCpy(SFlastPath, SFtextBuffer, MAXPATHLEN); // remember for cancel
+       strncpy(SFfilterBuffer, filter, MAXPATHLEN-1);
+       strncpy(SFlastPath, SFtextBuffer, MAXPATHLEN-1); // remember for cancel
 
        SFpositionWidget(selFile);
        XtMapWidget(selFile);
@@ -844,8 +846,8 @@ XsraSelFile(toplevel, prompt, ok, cancel, failed,
                                SFprepareToReturn();
                                return stderr;
                        }
-                       if (fp = SFopenFile(*name_return, mode,
-                                           prompt, failed)) {
+                       if ((*name_return)[strlen(*name_return)-1] != '/' &&         // [HGM] refuse directories
+                           (fp = SFopenFile(*name_return, mode, prompt, failed))) {
                                SFprepareToReturn();
                                return fp;
                        }