diff src/view_dir.c @ 1626:94e4a47ccaff

simplified the code around vd_select_row
author nadvornik
date Fri, 05 Jun 2009 21:52:37 +0000
parents 99c194fa2fc9
children 9b692bdb4b9f
line wrap: on
line diff
--- a/src/view_dir.c	Thu Jun 04 16:07:16 2009 +0000
+++ b/src/view_dir.c	Fri Jun 05 21:52:37 2009 +0000
@@ -143,7 +143,7 @@
 }
 
 void vd_set_select_func(ViewDir *vd,
-			void (*func)(ViewDir *vd, const gchar *path, gpointer data), gpointer data)
+			void (*func)(ViewDir *vd, FileData *fd, gpointer data), gpointer data)
 {
 	vd->select_func = func;
 	vd->select_data = data;
@@ -193,13 +193,15 @@
 	return ret;
 }
 
+/* the calling stack is this:
+   vd_select_row -> select_func -> layout_set_fd -> vd_set_fd
+*/
 void vd_select_row(ViewDir *vd, FileData *fd)
 {
-	switch (vd->type)
-	{
-	case DIRVIEW_LIST: vdlist_select_row(vd, fd); break;
-	case DIRVIEW_TREE: vdtree_select_row(vd, fd); break;
-	}
+	if (fd && vd->select_func)
+		{
+		vd->select_func(vd, fd, vd->select_data);
+		}
 }
 
 gboolean vd_find_row(ViewDir *vd, FileData *fd, GtkTreeIter *iter)
@@ -422,7 +424,9 @@
 
 	if (vd->select_func)
 		{
-		vd->select_func(vd, path, vd->select_data);
+		FileData *fd = file_data_new_simple(path);
+		vd->select_func(vd, fd, vd->select_data);
+		file_data_unref(fd);
 		}
 
 	g_free(path);
@@ -1023,7 +1027,7 @@
 
 	if (fd && vd->click_fd == fd)
 		{
-		vdlist_select_row(vd, vd->click_fd);
+		vd_select_row(vd, vd->click_fd);
 		}
 
 	return FALSE;