X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=filebrowser%2Fselfile.c;h=3a597b0368e27d15440e67a8e997167cea5b735c;hb=71c3de687d33523d83dec50208b0e44815fd7d20;hp=477b02254930635c3d14bd7e0b7b7cd9c91b6170;hpb=8c9c9b75176c6135bd37d190e20b6e1818ff108f;p=xboard.git diff --git a/filebrowser/selfile.c b/filebrowser/selfile.c index 477b022..3a597b0 100644 --- a/filebrowser/selfile.c +++ b/filebrowser/selfile.c @@ -60,17 +60,8 @@ extern int errno; #include #include -#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; }