comparison 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
comparison
equal deleted inserted replaced
1625:922d7508febd 1626:94e4a47ccaff
141 141
142 return vd; 142 return vd;
143 } 143 }
144 144
145 void vd_set_select_func(ViewDir *vd, 145 void vd_set_select_func(ViewDir *vd,
146 void (*func)(ViewDir *vd, const gchar *path, gpointer data), gpointer data) 146 void (*func)(ViewDir *vd, FileData *fd, gpointer data), gpointer data)
147 { 147 {
148 vd->select_func = func; 148 vd->select_func = func;
149 vd->select_data = data; 149 vd->select_data = data;
150 } 150 }
151 151
191 } 191 }
192 192
193 return ret; 193 return ret;
194 } 194 }
195 195
196 /* the calling stack is this:
197 vd_select_row -> select_func -> layout_set_fd -> vd_set_fd
198 */
196 void vd_select_row(ViewDir *vd, FileData *fd) 199 void vd_select_row(ViewDir *vd, FileData *fd)
197 { 200 {
198 switch (vd->type) 201 if (fd && vd->select_func)
199 { 202 {
200 case DIRVIEW_LIST: vdlist_select_row(vd, fd); break; 203 vd->select_func(vd, fd, vd->select_data);
201 case DIRVIEW_TREE: vdtree_select_row(vd, fd); break; 204 }
202 }
203 } 205 }
204 206
205 gboolean vd_find_row(ViewDir *vd, FileData *fd, GtkTreeIter *iter) 207 gboolean vd_find_row(ViewDir *vd, FileData *fd, GtkTreeIter *iter)
206 { 208 {
207 gboolean ret = FALSE; 209 gboolean ret = FALSE;
420 if (!vd->dir_fd || strcmp(vd->dir_fd->path, G_DIR_SEPARATOR_S) == 0) return; 422 if (!vd->dir_fd || strcmp(vd->dir_fd->path, G_DIR_SEPARATOR_S) == 0) return;
421 path = remove_level_from_path(vd->dir_fd->path); 423 path = remove_level_from_path(vd->dir_fd->path);
422 424
423 if (vd->select_func) 425 if (vd->select_func)
424 { 426 {
425 vd->select_func(vd, path, vd->select_data); 427 FileData *fd = file_data_new_simple(path);
428 vd->select_func(vd, fd, vd->select_data);
429 file_data_unref(fd);
426 } 430 }
427 431
428 g_free(path); 432 g_free(path);
429 } 433 }
430 434
1021 gtk_tree_path_free(tpath); 1025 gtk_tree_path_free(tpath);
1022 } 1026 }
1023 1027
1024 if (fd && vd->click_fd == fd) 1028 if (fd && vd->click_fd == fd)
1025 { 1029 {
1026 vdlist_select_row(vd, vd->click_fd); 1030 vd_select_row(vd, vd->click_fd);
1027 } 1031 }
1028 1032
1029 return FALSE; 1033 return FALSE;
1030 } 1034 }
1031 1035