g_free(buf);
}
-static void layout_vd_select_cb(ViewDir *vd, const gchar *path, gpointer data)
+static void layout_vd_select_cb(ViewDir *vd, FileData *fd, gpointer data)
{
LayoutWindow *lw = data;
- layout_set_path(lw, path);
+ layout_set_fd(lw, fd);
}
static void layout_path_entry_tab_append_cb(const gchar *path, gpointer data, gint n)
guint drop_scroll_id; /* event source id */
/* func list */
- void (*select_func)(ViewDir *vd, const gchar *path, gpointer data);
+ void (*select_func)(ViewDir *vd, FileData *fd, gpointer data);
gpointer select_data;
void (*dnd_drop_update_func)(ViewDir *vd);
}
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;
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)
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);
if (fd && vd->click_fd == fd)
{
- vdlist_select_row(vd, vd->click_fd);
+ vd_select_row(vd, vd->click_fd);
}
return FALSE;
ViewDir *vd_new(DirViewType type, FileData *dir_fd);
-void vd_set_select_func(ViewDir *vdl, void (*func)(ViewDir *vdl, const gchar *path, gpointer data), gpointer data);
+void vd_set_select_func(ViewDir *vdl, void (*func)(ViewDir *vdl, FileData *fd, gpointer data), gpointer data);
void vd_set_layout(ViewDir *vdl, LayoutWindow *layout);
*-----------------------------------------------------------------------------
*/
-void vdlist_select_row(ViewDir *vd, FileData *fd)
-{
- if (fd && vd->select_func)
- {
- gchar *path;
-
- path = g_strdup(fd->path);
- vd->select_func(vd, path, vd->select_data);
- g_free(path);
- }
-}
-
const gchar *vdlist_row_get_path(ViewDir *vd, gint row)
{
FileData *fd;
ViewDir *vdlist_new(ViewDir *vd, FileData *dir_fd);
-void vdlist_select_row(ViewDir *vd, FileData *fd);
-
gboolean vdlist_set_fd(ViewDir *vd, FileData *dir_fd);
void vdlist_refresh(ViewDir *vd);
return selection_is_ok;
}
-void vdtree_select_row(ViewDir *vd, FileData *fd)
-{
- GtkTreeSelection *selection;
- GtkTreeIter iter;
-
- if (!vd_find_row(vd, fd, &iter)) return;
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vd->view));
-
- /* hack, such that selection is only allowed to be changed from here */
- selection_is_ok = TRUE;
- gtk_tree_selection_select_iter(selection, &iter);
- selection_is_ok = FALSE;
-
- if (!vdtree_populate_path_by_iter(vd, &iter, FALSE, vd->dir_fd)) return;
-
- vdtree_expand_by_iter(vd, &iter, TRUE);
-
- if (fd && vd->select_func)
- {
- vd->select_func(vd, fd->path, vd->select_data);
- }
-}
-
gboolean vdtree_set_fd(ViewDir *vd, FileData *dir_fd)
{
FileData *fd;
{
GtkTreeModel *store;
GtkTreePath *tpath;
-
- tree_view_row_make_visible(GTK_TREE_VIEW(vd->view), &iter, TRUE);
+ GtkTreeSelection *selection;
store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
tpath = gtk_tree_model_get_path(store, &iter);
gtk_tree_view_set_cursor(GTK_TREE_VIEW(vd->view), tpath, NULL, FALSE);
gtk_tree_path_free(tpath);
- vdtree_select_row(vd, fd);
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vd->view));
+
+ /* hack, such that selection is only allowed to be changed from here */
+ selection_is_ok = TRUE;
+ gtk_tree_selection_select_iter(selection, &iter);
+ selection_is_ok = FALSE;
+
+ tree_view_row_make_visible(GTK_TREE_VIEW(vd->view), &iter, TRUE);
}
return TRUE;
ViewDir *vdtree_new(ViewDir *vd, FileData *dir_fd);
-void vdtree_select_row(ViewDir *vd, FileData *fd);
-
gboolean vdtree_set_fd(ViewDir *vd, FileData *dir_fd);
void vdtree_refresh(ViewDir *vd);