simplified the code around vd_select_row
authorVladimir Nadvornik <nadvornik@suse.cz>
Fri, 5 Jun 2009 21:52:37 +0000 (21:52 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Fri, 5 Jun 2009 21:52:37 +0000 (21:52 +0000)
src/layout.c
src/typedefs.h
src/view_dir.c
src/view_dir.h
src/view_dir_list.c
src/view_dir_list.h
src/view_dir_tree.c
src/view_dir_tree.h

index d6afcd3..c7a841d 100644 (file)
@@ -242,11 +242,11 @@ static void layout_path_entry_cb(const gchar *path, gpointer data)
        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)
index 256a8db..abd9224 100644 (file)
@@ -687,7 +687,7 @@ struct _ViewDir
        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);
index 31de3fb..402a81a 100644 (file)
@@ -143,7 +143,7 @@ ViewDir *vd_new(DirViewType type, FileData *dir_fd)
 }
 
 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 @@ const gchar *vd_row_get_path(ViewDir *vd, gint row)
        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 @@ static void vd_pop_menu_up_cb(GtkWidget *widget, gpointer data)
 
        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 @@ gboolean vd_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
 
        if (fd && vd->click_fd == fd)
                {
-               vdlist_select_row(vd, vd->click_fd);
+               vd_select_row(vd, vd->click_fd);
                }
 
        return FALSE;
index 10ef004..6115a23 100644 (file)
@@ -26,7 +26,7 @@ extern GtkRadioActionEntry menu_view_dir_radio_entries[VIEW_DIR_TYPES_COUNT];
 
 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);
 
index f72f89d..e0f4ca4 100644 (file)
@@ -117,18 +117,6 @@ static void vdlist_scroll_to_row(ViewDir *vd, FileData *fd, gfloat y_align)
  *-----------------------------------------------------------------------------
  */
 
-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;
index 3d7eb40..87c8bdb 100644 (file)
@@ -16,8 +16,6 @@
 
 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);
 
index 0b93d3f..7cdfafe 100644 (file)
@@ -676,29 +676,6 @@ static gboolean vdtree_select_cb(GtkTreeSelection *selection, GtkTreeModel *stor
        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;
@@ -718,15 +695,21 @@ gboolean vdtree_set_fd(ViewDir *vd, FileData *dir_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;
index c94a445..e9bae69 100644 (file)
@@ -24,8 +24,6 @@ struct _NodeData
 
 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);