Couple mouse wheel to v-scrolls in file browser
[xboard.git] / filebrowser / draw.c
index a5b85f5..abab957 100644 (file)
 #endif
 #define ABS(x) (((x) < 0) ? (-(x)) : (x))
 
+/* added missing prototypes */
+extern char SFstatChar(struct stat*);
+extern int SFchdir(char *);
+void SFvSliderMovedCallback(Widget, int, int);
+
 typedef struct {
        char *fontname;
 } TextData, *textPtr;
@@ -500,7 +505,7 @@ SFscrollTimer(p, id)
        int     save;
        int     n;
 
-        n = (int) p;
+        n = (int)(intptr_t) p;
 
        dir = &(SFdirs[SFdirPtr + n]);
        save = dir->vOrigin;
@@ -530,7 +535,7 @@ SFscrollTimer(p, id)
 
        if (SFbuttonPressed) {
                SFscrollTimerId = XtAppAddTimeOut(SFapp,
-                       SFscrollTimerInterval(), SFscrollTimer, (XtPointer) n);
+                       SFscrollTimerInterval(), SFscrollTimer, (XtPointer)(intptr_t) n);
        }
 }
 
@@ -571,7 +576,7 @@ SFnewInvertEntry(n, event)
                                SFscrollTimerAdded = 1;
                                SFscrollTimerId = XtAppAddTimeOut(SFapp,
                                        SFscrollTimerInterval(), SFscrollTimer,
-                                       (XtPointer) n);
+                                       (XtPointer)(intptr_t) n);
                        }
                }
 
@@ -637,20 +642,6 @@ SFmotionList(w, n, event)
        return;
 }
 
-/* ARGSUSED */
-void
-SFvFloatSliderMovedCallback(w, n, fnew)
-       Widget  w;
-       int     n;
-       float   *fnew;
-{
-       int     new;
-
-       new = (*fnew) * SFdirs[SFdirPtr + n].nEntries;
-
-       SFvSliderMovedCallback(w, n, new);
-}
-
 /* ARGSUSED */
 void
 SFvSliderMovedCallback(w, n, new)
@@ -664,7 +655,10 @@ SFvSliderMovedCallback(w, n, new)
 
        dir = &(SFdirs[SFdirPtr + n]);
 
+
        old = dir->vOrigin;
+       if(new == -1) new = old + 1; else if(new == -2) new = old - 1; // [HGM] indicates scroll direction on mousewheel event
+       if(new < 0 || new > dir->nEntries - SFlistSize) return;
        dir->vOrigin = new;
 
        if (old == new) {
@@ -737,6 +731,21 @@ SFvSliderMovedCallback(w, n, new)
        }
 }
 
+/* ARGSUSED */
+void
+SFvFloatSliderMovedCallback(w, n, fnew)
+       Widget  w;
+       int     n;
+       float   *fnew;
+{
+       int     new;
+
+       new = (*fnew) * SFdirs[SFdirPtr + n].nEntries;
+
+       SFvSliderMovedCallback(w, n, new);
+}
+
+
 /* ARGSUSED */
 void
 SFvAreaSelectedCallback(w, n, pnew)