X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=filebrowser%2Fselfile.c;h=71dcd8cd4dc137c820416b00051c5a4892afd342;hb=4eec2ced245a4f86a63ca03781250cc6c82cddf2;hp=d3f02f3137a5eb4da961e5bbb18c8b10226f07b8;hpb=e9a0808a5551217eb4fd29d949f3c7672545c168;p=xboard.git diff --git a/filebrowser/selfile.c b/filebrowser/selfile.c index d3f02f3..71dcd8c 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 @@ -83,10 +74,10 @@ extern char *getwd(); int SFstatus = SEL_FILE_NULL; char - SFstartDir[MAXPATHLEN], - SFcurrentPath[MAXPATHLEN], - SFlastPath[MAXPATHLEN], - SFcurrentDir[MAXPATHLEN]; + SFstartDir[MAXPATHLEN+1], + SFcurrentPath[MAXPATHLEN+1], + SFlastPath[MAXPATHLEN+1], + SFcurrentDir[MAXPATHLEN+1]; Widget selFile, @@ -136,9 +127,9 @@ XtAppContext SFapp; int SFpathScrollWidth, SFvScrollHeight, SFhScrollWidth; -char SFtextBuffer[MAXPATHLEN]; +char SFtextBuffer[MAXPATHLEN+1]; -char SFfilterBuffer[MAXPATHLEN]; +char SFfilterBuffer[MAXPATHLEN+1]; XtIntervalId SFdirModTimerId; @@ -392,7 +383,6 @@ SFcreateWidgets(toplevel, prompt, ok, cancel) XtSetArg(arglist[i], XtNeditType, XawtextEdit); i++; XtSetArg(arglist[i], XtNwrap, XawtextWrapWord); i++; XtSetArg(arglist[i], XtNresize, XawtextResizeHeight); i++; - XtSetArg(arglist[i], XtNuseStringInPlace, True); i++; selFileField = XtCreateManagedWidget("selFileField", asciiTextWidgetClass, selFileForm, arglist, i); @@ -598,7 +588,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, @@ -688,8 +678,35 @@ SFopenFile(name, mode, prompt, failed) } void +SFupdateTextBuffer() +{ + Arg arglist[2]; + int i; + char *v; + + i = 0; + XtSetArg(arglist[i], XtNstring, &v); i++; + XtGetValues(selFileField, arglist, i); + strncpy(SFtextBuffer, v, MAXPATHLEN); +} + +void +SFsetText(path) + char *path; +{ + Arg arglist[2]; + int i; + + i = 0; + XtSetArg(arglist[i], XtNstring, path); i++; + XtSetValues(selFileField, arglist, i); + XawTextSetInsertionPoint(selFileField, strlen(path)); +} + +void SFtextChanged() { + SFupdateTextBuffer(); if ((SFtextBuffer[0] == '/') || (SFtextBuffer[0] == '~')) { (void) strncpy(SFcurrentPath, SFtextBuffer, MAXPATHLEN); @@ -794,8 +811,9 @@ 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); + SFupdateTextBuffer(); + strncpy(SFlastPath, SFtextBuffer, MAXPATHLEN-1); // remember for cancel SFpositionWidget(selFile); XtMapWidget(selFile); @@ -855,8 +873,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; } @@ -870,4 +888,5 @@ XsraSelFile(toplevel, prompt, ok, cancel, failed, break; } } + }