+static gboolean folderview_dnd_scroll_cb(gpointer data)
+{
+ FolderView *folderview = (FolderView *)data;
+ GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment(
+ GTK_SCROLLED_WINDOW(folderview->scrolledwin));
+ gint new_val = (int)pos->value + folderview->scroll_value;
+ gint max = (int)pos->upper - (int)pos->page_size;
+
+ if (folderview->scroll_value == 0) {
+ folderview->scroll_timeout_id = -1;
+ return FALSE;
+ }
+
+ if (folderview->scroll_value > 0 && new_val > max) {
+ new_val = max;
+ } else if (folderview->scroll_value < 0 && new_val < 0) {
+ new_val = 0;
+ }
+ gtk_adjustment_set_value(pos, new_val);
+
+ return TRUE;
+}
+