annotate src/view_dir_tree.c @ 2916:ae6cdcd69d9f default tip

Merge with upstream/master.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 14 May 2019 11:46:50 +0300
parents 009f0a811472
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1 /*
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
2 * Copyright (C) 2006 John Ellis
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
3 * Copyright (C) 2008 - 2016 The Geeqie Team
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
4 *
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
5 * Author: John Ellis
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
6 *
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
7 * This program is free software; you can redistribute it and/or modify
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
8 * it under the terms of the GNU General Public License as published by
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
10 * (at your option) any later version.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
11 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
12 * This program is distributed in the hope that it will be useful,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
15 * GNU General Public License for more details.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
16 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
17 * You should have received a copy of the GNU General Public License along
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
18 * with this program; if not, write to the Free Software Foundation, Inc.,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
20 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
21
281
b1c2c2cf19d4 gqview.h -> main.h
Laurent Monin <geeqie@norz.org>
parents: 250
diff changeset
22 #include "main.h"
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
23 #include "view_dir_tree.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
24
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
25
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
26 #include "dnd.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
27 #include "dupe.h"
586
122fc2223b42 split filelist.c to filefilter.c and filedata.c
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 512
diff changeset
28 #include "filedata.h"
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
29 #include "layout.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
30 #include "layout_image.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
31 #include "layout_util.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
32 #include "utilops.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
33 #include "ui_fileops.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
34 #include "ui_menu.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
35 #include "ui_tree_edit.h"
380
41079d11eba7 Introduce a new struct ViewDir to handle directory views common
Laurent Monin <geeqie@norz.org>
parents: 356
diff changeset
36 #include "view_dir.h"
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
37
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
38 #include <gdk/gdkkeysyms.h> /* for keyboard values */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
39
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
40
979
e1c143d37769 Typo fix: vf -> vd
Laurent Monin <geeqie@norz.org>
parents: 978
diff changeset
41 #define VDTREE(_vd_) ((ViewDirInfoTree *)(_vd_->info))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
42
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
43
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
44 typedef struct _PathData PathData;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
45 struct _PathData
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
46 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
47 gchar *name;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
48 FileData *node;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
49 };
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
50
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
51
1630
9f2b903a22bc do not call signal handler from vdtree_row_expanded
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1629
diff changeset
52 static void vdtree_row_expanded(GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *tpath, gpointer data);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
53
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
54
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
55 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
56 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
57 * utils
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
58 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
59 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
60
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
61 static void set_cursor(GtkWidget *widget, GdkCursorType cursor_type)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
62 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
63 GdkCursor *cursor = NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
64
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
65 if (!widget || !gtk_widget_get_window(widget)) return;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
66
512
0896f486ec6f Remove whitespace between function name and first parenthesis for the sake of consistency.
Laurent Monin <geeqie@norz.org>
parents: 475
diff changeset
67 if (cursor_type > -1) cursor = gdk_cursor_new(cursor_type);
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
68 gdk_window_set_cursor(gtk_widget_get_window(widget), cursor);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
69 if (cursor) gdk_cursor_unref(cursor);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
70 gdk_flush();
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
71 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
72
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
73 static void vdtree_busy_push(ViewDir *vd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
74 {
978
88298012a2be Replace macros VDLIST_INFO() and VDTREE_INFO() by shorter VDLIST() and VDTREE(). VDLIST_INFO(vd, part) becomes VDLIST(vd)->part.
Laurent Monin <geeqie@norz.org>
parents: 943
diff changeset
75 if (VDTREE(vd)->busy_ref == 0) set_cursor(vd->view, GDK_WATCH);
88298012a2be Replace macros VDLIST_INFO() and VDTREE_INFO() by shorter VDLIST() and VDTREE(). VDLIST_INFO(vd, part) becomes VDLIST(vd)->part.
Laurent Monin <geeqie@norz.org>
parents: 943
diff changeset
76 VDTREE(vd)->busy_ref++;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
77 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
78
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
79 static void vdtree_busy_pop(ViewDir *vd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
80 {
978
88298012a2be Replace macros VDLIST_INFO() and VDTREE_INFO() by shorter VDLIST() and VDTREE(). VDLIST_INFO(vd, part) becomes VDLIST(vd)->part.
Laurent Monin <geeqie@norz.org>
parents: 943
diff changeset
81 if (VDTREE(vd)->busy_ref == 1) set_cursor(vd->view, -1);
88298012a2be Replace macros VDLIST_INFO() and VDTREE_INFO() by shorter VDLIST() and VDTREE(). VDLIST_INFO(vd, part) becomes VDLIST(vd)->part.
Laurent Monin <geeqie@norz.org>
parents: 943
diff changeset
82 if (VDTREE(vd)->busy_ref > 0) VDTREE(vd)->busy_ref--;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
83 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
84
1501
9ea21d03c41d fixed vdlist_find_row return value
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1452
diff changeset
85 gboolean vdtree_find_row(ViewDir *vd, FileData *fd, GtkTreeIter *iter, GtkTreeIter *parent)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
86 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
87 GtkTreeModel *store;
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
88 gboolean valid;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
89
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
90 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
91 if (parent)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
92 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
93 valid = gtk_tree_model_iter_children(store, iter, parent);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
94 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
95 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
96 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
97 valid = gtk_tree_model_get_iter_first(store, iter);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
98 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
99 while (valid)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
100 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
101 NodeData *nd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
102 GtkTreeIter found;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
103
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
104 gtk_tree_model_get(GTK_TREE_MODEL(store), iter, DIR_COLUMN_POINTER, &nd, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
105 if (nd->fd == fd) return TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
106
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
107 if (vdtree_find_row(vd, fd, &found, iter))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
108 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
109 memcpy(iter, &found, sizeof(found));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
110 return TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
111 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
112
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
113 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), iter);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
114 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
115
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
116 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
117 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
118
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
119 static void vdtree_icon_set_by_iter(ViewDir *vd, GtkTreeIter *iter, GdkPixbuf *pixbuf)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
120 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
121 GtkTreeModel *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
122 GdkPixbuf *old;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
123
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
124 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
125 gtk_tree_model_get(store, iter, DIR_COLUMN_ICON, &old, -1);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
126 if (old != vd->pf->deny)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
127 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
128 gtk_tree_store_set(GTK_TREE_STORE(store), iter, DIR_COLUMN_ICON, pixbuf, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
129 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
130 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
131
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
132 static void vdtree_expand_by_iter(ViewDir *vd, GtkTreeIter *iter, gboolean expand)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
133 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
134 GtkTreeModel *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
135 GtkTreePath *tpath;
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
136 NodeData *nd;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
137 FileData *fd = NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
138
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
139 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
140 tpath = gtk_tree_model_get_path(store, iter);
1630
9f2b903a22bc do not call signal handler from vdtree_row_expanded
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1629
diff changeset
141
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
142 if (expand)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
143 {
1630
9f2b903a22bc do not call signal handler from vdtree_row_expanded
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1629
diff changeset
144 /* block signal handler, icon is set here, the caller of vdtree_expand_by_iter must make sure
9f2b903a22bc do not call signal handler from vdtree_row_expanded
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1629
diff changeset
145 that the iter is populated */
9f2b903a22bc do not call signal handler from vdtree_row_expanded
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1629
diff changeset
146 g_signal_handlers_block_by_func(G_OBJECT(vd->view), vdtree_row_expanded, vd);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
147 gtk_tree_view_expand_row(GTK_TREE_VIEW(vd->view), tpath, FALSE);
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
148 gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
149 fd = (nd) ? nd->fd : NULL;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
150
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
151 if (fd && islink(fd->path))
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
152 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
153 vdtree_icon_set_by_iter(vd, iter, vd->pf->link);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
154 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
155 else
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
156 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
157 vdtree_icon_set_by_iter(vd, iter, vd->pf->open);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
158 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
159
1630
9f2b903a22bc do not call signal handler from vdtree_row_expanded
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1629
diff changeset
160 g_signal_handlers_unblock_by_func(G_OBJECT(vd->view), vdtree_row_expanded, vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
161 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
162 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
163 {
1630
9f2b903a22bc do not call signal handler from vdtree_row_expanded
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1629
diff changeset
164 /* signal handler vdtree_row_collapsed is called, it updates the icon */
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
165 gtk_tree_view_collapse_row(GTK_TREE_VIEW(vd->view), tpath);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
166 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
167 gtk_tree_path_free(tpath);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
168 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
169
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
170 static void vdtree_expand_by_data(ViewDir *vd, FileData *fd, gboolean expand)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
171 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
172 GtkTreeIter iter;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
173
389
cc1094d922dd Merge few more vdlist/vdtree functions.
Laurent Monin <geeqie@norz.org>
parents: 388
diff changeset
174 if (vd_find_row(vd, fd, &iter))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
175 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
176 vdtree_expand_by_iter(vd, &iter, expand);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
177 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
178 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
179
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
180 static void vdtree_node_free(NodeData *nd)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
181 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
182 if (!nd) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
183
1926
776d6784c7c3 do not use FileData entries with empty path
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1802
diff changeset
184 if (nd->fd) file_data_unref(nd->fd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
185 g_free(nd);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
186 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
187
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
188 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
189 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
190 * dnd
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
191 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
192 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
193
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
194 static gboolean vdtree_dnd_drop_expand_cb(gpointer data)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
195 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
196 ViewDir *vd = data;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
197 GtkTreeIter iter;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
198
394
ae99e42db2f1 Merge dirlist/dirview dnd code.
Laurent Monin <geeqie@norz.org>
parents: 389
diff changeset
199 if (vd->drop_fd && vd_find_row(vd, vd->drop_fd, &iter))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
200 {
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
201 vdtree_populate_path_by_iter(vd, &iter, FALSE, vd->dir_fd);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
202 vdtree_expand_by_data(vd, vd->drop_fd, TRUE);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
203 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
204
1523
e52aabe8fc7a Fix up event source ids type: gint -> guint.
Laurent Monin <geeqie@norz.org>
parents: 1501
diff changeset
205 VDTREE(vd)->drop_expand_id = 0;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
206 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
207 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
208
407
f441b932ed5c Rename vd_drop_update() to vd_dnd_drop_update().
Laurent Monin <geeqie@norz.org>
parents: 406
diff changeset
209 static void vdtree_dnd_drop_expand_cancel(ViewDir *vd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
210 {
1523
e52aabe8fc7a Fix up event source ids type: gint -> guint.
Laurent Monin <geeqie@norz.org>
parents: 1501
diff changeset
211 if (VDTREE(vd)->drop_expand_id)
e52aabe8fc7a Fix up event source ids type: gint -> guint.
Laurent Monin <geeqie@norz.org>
parents: 1501
diff changeset
212 {
e52aabe8fc7a Fix up event source ids type: gint -> guint.
Laurent Monin <geeqie@norz.org>
parents: 1501
diff changeset
213 g_source_remove(VDTREE(vd)->drop_expand_id);
e52aabe8fc7a Fix up event source ids type: gint -> guint.
Laurent Monin <geeqie@norz.org>
parents: 1501
diff changeset
214 VDTREE(vd)->drop_expand_id = 0;
e52aabe8fc7a Fix up event source ids type: gint -> guint.
Laurent Monin <geeqie@norz.org>
parents: 1501
diff changeset
215 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
216 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
217
407
f441b932ed5c Rename vd_drop_update() to vd_dnd_drop_update().
Laurent Monin <geeqie@norz.org>
parents: 406
diff changeset
218 static void vdtree_dnd_drop_expand(ViewDir *vd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
219 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
220 vdtree_dnd_drop_expand_cancel(vd);
978
88298012a2be Replace macros VDLIST_INFO() and VDTREE_INFO() by shorter VDLIST() and VDTREE(). VDLIST_INFO(vd, part) becomes VDLIST(vd)->part.
Laurent Monin <geeqie@norz.org>
parents: 943
diff changeset
221 VDTREE(vd)->drop_expand_id = g_timeout_add(1000, vdtree_dnd_drop_expand_cb, vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
222 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
223
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
224 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
225 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
226 * parts lists
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
227 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
228 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
229
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
230 static GList *parts_list(const gchar *path)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
231 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
232 GList *list = NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
233 const gchar *strb, *strp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
234 gint l;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
235
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
236 strp = path;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
237
726
5166ed61c537 Use G_DIR_SEPARATOR where applicable.
Laurent Monin <geeqie@norz.org>
parents: 725
diff changeset
238 if (*strp != G_DIR_SEPARATOR) return NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
239
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
240 strp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
241 strb = strp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
242 l = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
243
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
244 while (*strp != '\0')
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
245 {
726
5166ed61c537 Use G_DIR_SEPARATOR where applicable.
Laurent Monin <geeqie@norz.org>
parents: 725
diff changeset
246 if (*strp == G_DIR_SEPARATOR)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
247 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
248 if (l > 0) list = g_list_prepend(list, g_strndup(strb, l));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
249 strp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
250 strb = strp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
251 l = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
252 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
253 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
254 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
255 strp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
256 l++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
257 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
258 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
259 if (l > 0) list = g_list_prepend(list, g_strndup(strb, l));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
260
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
261 list = g_list_reverse(list);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
262
725
ee5f1f4fd7e7 Use G_DIR_SEPARATOR_S where applicable.
Laurent Monin <geeqie@norz.org>
parents: 673
diff changeset
263 list = g_list_prepend(list, g_strdup(G_DIR_SEPARATOR_S));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
264
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
265 return list;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
266 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
267
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
268 static void parts_list_free(GList *list)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
269 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
270 GList *work = list;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
271 while (work)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
272 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
273 PathData *pd = work->data;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
274 g_free(pd->name);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
275 g_free(pd);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
276 work = work->next;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
277 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
278
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
279 g_list_free(list);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
280 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
281
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
282 static GList *parts_list_add_node_points(ViewDir *vd, GList *list)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
283 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
284 GList *work;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
285 GtkTreeModel *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
286 GtkTreeIter iter;
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
287 gboolean valid;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
288
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
289 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
290 valid = gtk_tree_model_get_iter_first(store, &iter);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
291
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
292 work = list;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
293 while (work)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
294 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
295 PathData *pd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
296 FileData *fd = NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
297
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
298 pd = g_new0(PathData, 1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
299 pd->name = work->data;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
300
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
301 while (valid && !fd)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
302 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
303 NodeData *nd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
304
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
305 gtk_tree_model_get(store, &iter, DIR_COLUMN_POINTER, &nd, -1);
1926
776d6784c7c3 do not use FileData entries with empty path
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1802
diff changeset
306 if (nd->fd && strcmp(nd->fd->name, pd->name) == 0)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
307 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
308 fd = nd->fd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
309 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
310 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
311 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
312 valid = gtk_tree_model_iter_next(store, &iter);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
313 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
314 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
315
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
316 pd->node = fd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
317 work->data = pd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
318
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
319 if (fd)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
320 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
321 GtkTreeIter parent;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
322 memcpy(&parent, &iter, sizeof(parent));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
323 valid = gtk_tree_model_iter_children(store, &iter, &parent);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
324 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
325
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
326 work = work->next;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
327 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
328
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
329 return list;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
330 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
331
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
332
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
333 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
334 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
335 * node traversal, management
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
336 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
337 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
338
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
339 static gboolean vdtree_find_iter_by_data(ViewDir *vd, GtkTreeIter *parent, NodeData *nd, GtkTreeIter *iter)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
340 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
341 GtkTreeModel *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
342
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
343 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
344 if (!nd || !gtk_tree_model_iter_children(store, iter, parent)) return -1;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
345 do {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
346 NodeData *cnd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
347
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
348 gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &cnd, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
349 if (cnd == nd) return TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
350 } while (gtk_tree_model_iter_next(store, iter));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
351
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
352 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
353 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
354
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
355 static NodeData *vdtree_find_iter_by_name(ViewDir *vd, GtkTreeIter *parent, const gchar *name, GtkTreeIter *iter)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
356 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
357 GtkTreeModel *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
358
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
359 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
360 if (!name || !gtk_tree_model_iter_children(store, iter, parent)) return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
361 do {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
362 NodeData *nd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
363
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
364 gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
365 if (nd && strcmp(nd->fd->name, name) == 0) return nd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
366 } while (gtk_tree_model_iter_next(store, iter));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
367
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
368 return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
369 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
370
1232
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
371 static NodeData *vdtree_find_iter_by_fd(ViewDir *vd, GtkTreeIter *parent, FileData *fd, GtkTreeIter *iter)
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
372 {
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
373 GtkTreeModel *store;
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
374
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
375 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
376 if (!fd || !gtk_tree_model_iter_children(store, iter, parent)) return NULL;
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
377 do {
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
378 NodeData *nd;
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
379
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
380 gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
381 if (nd && nd->fd == fd) return nd;
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
382 } while (gtk_tree_model_iter_next(store, iter));
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
383
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
384 return NULL;
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
385 }
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
386
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
387 static void vdtree_add_by_data(ViewDir *vd, FileData *fd, GtkTreeIter *parent)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
388 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
389 GtkTreeStore *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
390 GtkTreeIter child;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
391 NodeData *nd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
392 GdkPixbuf *pixbuf;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
393 NodeData *end;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
394 GtkTreeIter empty;
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
395 gchar *link = NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
396
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
397 if (!fd) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
398
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
399 if (access_file(fd->path, R_OK | X_OK))
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
400 {
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
401 if (islink(fd->path))
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
402 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
403 pixbuf = vd->pf->link;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
404 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
405 else
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
406 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
407 pixbuf = vd->pf->close;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
408 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
409 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
410 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
411 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
412 pixbuf = vd->pf->deny;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
413 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
414
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
415 nd = g_new0(NodeData, 1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
416 nd->fd = fd;
907
598938add3af added notification handler to view_dir
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 902
diff changeset
417 nd->version = fd->version;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
418 nd->expanded = FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
419 nd->last_update = time(NULL);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
420
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
421 if (islink(fd->path))
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
422 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
423 link = realpath(fd->path, NULL);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
424 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
425 else
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
426 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
427 link = NULL;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
428 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
429
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
430 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
431 gtk_tree_store_append(store, &child, parent);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
432 gtk_tree_store_set(store, &child, DIR_COLUMN_POINTER, nd,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
433 DIR_COLUMN_ICON, pixbuf,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
434 DIR_COLUMN_NAME, nd->fd->name,
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
435 DIR_COLUMN_LINK, link,
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
436 DIR_COLUMN_COLOR, FALSE, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
437
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
438 /* all nodes are created with an "empty" node, so that the expander is shown
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
439 * this is removed when the child is populated */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
440 end = g_new0(NodeData, 1);
1926
776d6784c7c3 do not use FileData entries with empty path
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1802
diff changeset
441 end->fd = NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
442 end->expanded = TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
443
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
444 gtk_tree_store_append(store, &empty, &child);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
445 gtk_tree_store_set(store, &empty, DIR_COLUMN_POINTER, end,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
446 DIR_COLUMN_NAME, "empty", -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
447
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
448 if (parent)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
449 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
450 NodeData *pnd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
451 GtkTreePath *tpath;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
452
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
453 gtk_tree_model_get(GTK_TREE_MODEL(store), parent, DIR_COLUMN_POINTER, &pnd, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
454 tpath = gtk_tree_model_get_path(GTK_TREE_MODEL(store), parent);
320
bd97f1e60100 Move more options to ConfOptions.
Laurent Monin <geeqie@norz.org>
parents: 318
diff changeset
455 if (options->tree_descend_subdirs &&
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
456 gtk_tree_view_row_expanded(GTK_TREE_VIEW(vd->view), tpath) &&
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
457 !nd->expanded)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
458 {
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
459 vdtree_populate_path_by_iter(vd, &child, FALSE, vd->dir_fd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
460 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
461 gtk_tree_path_free(tpath);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
462 }
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
463
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
464 g_free(link);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
465 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
466
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
467 gboolean vdtree_populate_path_by_iter(ViewDir *vd, GtkTreeIter *iter, gboolean force, FileData *target_fd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
468 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
469 GtkTreeModel *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
470 GList *list;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
471 GList *work;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
472 GList *old;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
473 time_t current_time;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
474 GtkTreeIter child;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
475 NodeData *nd;
2392
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
476 gboolean add_hidden = FALSE;
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
477 gchar *link = NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
478
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
479 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
480 gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
481
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
482 if (!nd) return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
483
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
484 current_time = time(NULL);
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 407
diff changeset
485
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
486 if (nd->expanded)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
487 {
1926
776d6784c7c3 do not use FileData entries with empty path
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1802
diff changeset
488 if (!nd->fd || !isdir(nd->fd->path))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
489 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
490 if (vd->click_fd == nd->fd) vd->click_fd = NULL;
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
491 if (vd->drop_fd == nd->fd) vd->drop_fd = NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
492 gtk_tree_store_remove(GTK_TREE_STORE(store), iter);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
493 vdtree_node_free(nd);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
494 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
495 }
995
401cd18f8d38 Whitespaces cleanup.
Laurent Monin <geeqie@norz.org>
parents: 979
diff changeset
496 if (!force && current_time - nd->last_update < 2)
943
80a103f6e5a3 improved updating of view_dir_tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 916
diff changeset
497 {
80a103f6e5a3 improved updating of view_dir_tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 916
diff changeset
498 DEBUG_1("Too frequent update of %s", nd->fd->path);
80a103f6e5a3 improved updating of view_dir_tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 916
diff changeset
499 return TRUE;
80a103f6e5a3 improved updating of view_dir_tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 916
diff changeset
500 }
2018
04f3a395bb8f update file data structure
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1927
diff changeset
501 file_data_check_changed_files(nd->fd); /* make sure we have recent info */
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
502 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
503
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
504 /* when hidden files are not enabled, and the user enters a hidden path,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
505 * allow the tree to display that path by specifically inserting the hidden entries
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
506 */
356
ba4edae270d6 Rename show_dot_files to show_hidden_files.
Laurent Monin <geeqie@norz.org>
parents: 355
diff changeset
507 if (!options->file_filter.show_hidden_files &&
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
508 target_fd &&
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
509 strncmp(nd->fd->path, target_fd->path, strlen(nd->fd->path)) == 0)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
510 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
511 gint n;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
512
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
513 n = strlen(nd->fd->path);
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
514 if (target_fd->path[n] == G_DIR_SEPARATOR && target_fd->path[n+1] == '.')
2392
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
515 add_hidden = TRUE;
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
516 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
517
2392
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
518 if (nd->expanded && (!force && !add_hidden) && nd->fd->version == nd->version)
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
519 return TRUE;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
520
2392
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
521 vdtree_busy_push(vd);
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
522
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
523 filelist_read(nd->fd, NULL, &list);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
524
2392
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
525 if (add_hidden)
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
526 {
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
527 gint n;
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
528 gchar *name8;
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
529
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
530 n = strlen(nd->fd->path) + 1;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
531
2392
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
532 while (target_fd->path[n] != '\0' && target_fd->path[n] != G_DIR_SEPARATOR) n++;
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
533 name8 = g_strndup(target_fd->path, n);
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
534
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
535 if (isdir(name8))
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
536 {
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
537 list = g_list_prepend(list, file_data_new_dir(name8));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
538 }
2392
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
539
335b038e401c Fix hidden directories not showing in a tree view
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents: 2350
diff changeset
540 g_free(name8);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
541 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
542
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
543 old = NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
544 if (gtk_tree_model_iter_children(store, &child, iter))
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
545 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
546 do {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
547 NodeData *cnd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
548
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
549 gtk_tree_model_get(store, &child, DIR_COLUMN_POINTER, &cnd, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
550 old = g_list_prepend(old, cnd);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
551 } while (gtk_tree_model_iter_next(store, &child));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
552 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
553
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
554 work = list;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
555 while (work)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
556 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
557 FileData *fd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
558
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
559 fd = work->data;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
560 work = work->next;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
561
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
562 if (strcmp(fd->name, ".") == 0 || strcmp(fd->name, "..") == 0)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
563 {
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 125
diff changeset
564 file_data_unref(fd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
565 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
566 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
567 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
568 NodeData *cnd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
569
1232
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
570 cnd = vdtree_find_iter_by_fd(vd, iter, fd, &child);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
571 if (cnd)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
572 {
1232
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
573 if (cnd->expanded && cnd->version != fd->version)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
574 {
1232
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
575 vdtree_populate_path_by_iter(vd, &child, FALSE, target_fd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
576 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
577
1232
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
578 gtk_tree_store_set(GTK_TREE_STORE(store), &child, DIR_COLUMN_NAME, fd->name, -1);
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
579
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
580 if (islink(fd->path))
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
581 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
582 link = realpath(fd->path, NULL);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
583 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
584 else
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
585 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
586 link = NULL;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
587 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
588
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
589 gtk_tree_store_set(GTK_TREE_STORE(store), &child, DIR_COLUMN_LINK, link, -1);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
590
1232
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
591 cnd->version = fd->version;
83741493adbe do not enter a directory after rename
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1055
diff changeset
592 old = g_list_remove(old, cnd);
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 125
diff changeset
593 file_data_unref(fd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
594 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
595 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
596 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
597 vdtree_add_by_data(vd, fd, iter);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
598 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
599 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
600 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
601
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
602 work = old;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
603 while (work)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
604 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
605 NodeData *cnd = work->data;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
606 work = work->next;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
607
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
608 if (vd->click_fd == cnd->fd) vd->click_fd = NULL;
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
609 if (vd->drop_fd == cnd->fd) vd->drop_fd = NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
610
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
611 if (vdtree_find_iter_by_data(vd, iter, cnd, &child))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
612 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
613 gtk_tree_store_remove(GTK_TREE_STORE(store), &child);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
614 vdtree_node_free(cnd);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
615 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
616 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
617
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
618 g_list_free(old);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
619 g_list_free(list);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
620
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
621 vdtree_busy_pop(vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
622
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
623 nd->expanded = TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
624 nd->last_update = current_time;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
625
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
626 g_free(link);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
627
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
628 return TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
629 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
630
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
631 FileData *vdtree_populate_path(ViewDir *vd, FileData *target_fd, gboolean expand, gboolean force)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
632 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
633 GList *list;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
634 GList *work;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
635 FileData *fd = NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
636
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
637 if (!target_fd) return NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
638
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
639 vdtree_busy_push(vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
640
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
641 list = parts_list(target_fd->path);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
642 list = parts_list_add_node_points(vd, list);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
643
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
644 work = list;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
645 while (work)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
646 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
647 PathData *pd = work->data;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
648 if (pd->node == NULL)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
649 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
650 PathData *parent_pd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
651 GtkTreeIter parent_iter;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
652 GtkTreeIter iter;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
653 NodeData *nd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
654
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
655 if (work == list)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
656 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
657 /* should not happen */
673
c9c2bc042e10 Do not use printf() directly but use new wrapper function log_printf() instead.
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
658 log_printf("vdtree warning, root node not found\n");
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
659 parts_list_free(list);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
660 vdtree_busy_pop(vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
661 return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
662 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
663
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
664 parent_pd = work->prev->data;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
665
389
cc1094d922dd Merge few more vdlist/vdtree functions.
Laurent Monin <geeqie@norz.org>
parents: 388
diff changeset
666 if (!vd_find_row(vd, parent_pd->node, &parent_iter) ||
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
667 !vdtree_populate_path_by_iter(vd, &parent_iter, force, target_fd) ||
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
668 (nd = vdtree_find_iter_by_name(vd, &parent_iter, pd->name, &iter)) == NULL)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
669 {
673
c9c2bc042e10 Do not use printf() directly but use new wrapper function log_printf() instead.
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
670 log_printf("vdtree warning, aborted at %s\n", parent_pd->name);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
671 parts_list_free(list);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
672 vdtree_busy_pop(vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
673 return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
674 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
675
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
676 pd->node = nd->fd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
677
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
678 if (pd->node)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
679 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
680 if (expand)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
681 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
682 vdtree_expand_by_iter(vd, &parent_iter, TRUE);
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
683 vdtree_expand_by_iter(vd, &iter, TRUE);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
684 }
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
685 vdtree_populate_path_by_iter(vd, &iter, force, target_fd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
686 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
687 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
688 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
689 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
690 GtkTreeIter iter;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
691
389
cc1094d922dd Merge few more vdlist/vdtree functions.
Laurent Monin <geeqie@norz.org>
parents: 388
diff changeset
692 if (vd_find_row(vd, pd->node, &iter))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
693 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
694 if (expand) vdtree_expand_by_iter(vd, &iter, TRUE);
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
695 vdtree_populate_path_by_iter(vd, &iter, force, target_fd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
696 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
697 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
698
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
699 work = work->next;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
700 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
701
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
702 work = g_list_last(list);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
703 if (work)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
704 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
705 PathData *pd = work->data;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
706 fd = pd->node;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
707 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
708 parts_list_free(list);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
709
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
710 vdtree_busy_pop(vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
711
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
712 return fd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
713 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
714
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
715 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
716 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
717 * access
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
718 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
719 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
720
1437
cc423d10b73e gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1365
diff changeset
721 static gboolean selection_is_ok = FALSE;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
722
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
723 static gboolean vdtree_select_cb(GtkTreeSelection *selection, GtkTreeModel *store, GtkTreePath *tpath,
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 407
diff changeset
724 gboolean path_currently_selected, gpointer data)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
725 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
726 return selection_is_ok;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
727 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
728
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
729 gboolean vdtree_set_fd(ViewDir *vd, FileData *dir_fd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
730 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
731 FileData *fd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
732 GtkTreeIter iter;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
733
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
734 if (!dir_fd) return FALSE;
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
735 if (vd->dir_fd == dir_fd) return TRUE;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
736
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
737 file_data_unref(vd->dir_fd);
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
738 vd->dir_fd = file_data_ref(dir_fd);;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
739
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
740 fd = vdtree_populate_path(vd, vd->dir_fd, TRUE, FALSE);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
741
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
742 if (!fd) return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
743
389
cc1094d922dd Merge few more vdlist/vdtree functions.
Laurent Monin <geeqie@norz.org>
parents: 388
diff changeset
744 if (vd_find_row(vd, fd, &iter))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
745 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
746 GtkTreeModel *store;
1629
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
747 GtkTreePath *tpath, *old_tpath;
1628
ac33c60e405e simplified the code around vd_select_row
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1523
diff changeset
748 GtkTreeSelection *selection;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
749
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
750 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
751
1628
ac33c60e405e simplified the code around vd_select_row
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1523
diff changeset
752 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vd->view));
ac33c60e405e simplified the code around vd_select_row
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1523
diff changeset
753
ac33c60e405e simplified the code around vd_select_row
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1523
diff changeset
754 /* hack, such that selection is only allowed to be changed from here */
ac33c60e405e simplified the code around vd_select_row
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1523
diff changeset
755 selection_is_ok = TRUE;
ac33c60e405e simplified the code around vd_select_row
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1523
diff changeset
756 gtk_tree_selection_select_iter(selection, &iter);
ac33c60e405e simplified the code around vd_select_row
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1523
diff changeset
757 selection_is_ok = FALSE;
ac33c60e405e simplified the code around vd_select_row
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1523
diff changeset
758
1629
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
759 gtk_tree_view_get_cursor(GTK_TREE_VIEW(vd->view), &old_tpath, NULL);
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
760 tpath = gtk_tree_model_get_path(store, &iter);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2179
diff changeset
761
1629
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
762 if (!old_tpath || gtk_tree_path_compare(tpath, old_tpath) != 0)
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
763 {
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
764 /* setting the cursor scrolls the view; do not do that unless it is necessary */
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
765 gtk_tree_view_set_cursor(GTK_TREE_VIEW(vd->view), tpath, NULL, FALSE);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2179
diff changeset
766
1631
d80c4b8b3179 better implementation of tree_view_row_get_visibility,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1630
diff changeset
767 /* gtk_tree_view_set_cursor scrolls the window itself, but it sometimes
d80c4b8b3179 better implementation of tree_view_row_get_visibility,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1630
diff changeset
768 does not work (switch from dir_list to dir_tree) */
d80c4b8b3179 better implementation of tree_view_row_get_visibility,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1630
diff changeset
769 tree_view_row_make_visible(GTK_TREE_VIEW(vd->view), &iter, TRUE);
1629
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
770 }
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
771 gtk_tree_path_free(tpath);
50e2ef7fcfa8 reduced jumping of directory tree when user clicks on folders
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1628
diff changeset
772 gtk_tree_path_free(old_tpath);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
773 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
774
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
775 return TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
776 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
777
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
778 void vdtree_refresh(ViewDir *vd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
779 {
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
780 vdtree_populate_path(vd, vd->dir_fd, FALSE, TRUE);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
781 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
782
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
783 const gchar *vdtree_row_get_path(ViewDir *vd, gint row)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
784 {
673
c9c2bc042e10 Do not use printf() directly but use new wrapper function log_printf() instead.
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
785 log_printf("FIXME: no get row path\n");
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
786 return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
787 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
788
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
789 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
790 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
791 * callbacks
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
792 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
793 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
794
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
795 gboolean vdtree_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
796 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
797 ViewDir *vd = data;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
798 GtkTreePath *tpath;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
799 GtkTreeIter iter;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
800 FileData *fd = NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
801
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
802 gtk_tree_view_get_cursor(GTK_TREE_VIEW(vd->view), &tpath, NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
803 if (tpath)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
804 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
805 GtkTreeModel *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
806 NodeData *nd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
807
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
808 store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
809 gtk_tree_model_get_iter(store, &iter, tpath);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
810 gtk_tree_model_get(store, &iter, DIR_COLUMN_POINTER, &nd, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
811
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
812 gtk_tree_path_free(tpath);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
813
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
814 fd = (nd) ? nd->fd : NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
815 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
816
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
817 switch (event->keyval)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
818 {
2036
472c094c0154 changed GDK_<key> to GDK_KEY_<key>
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2034
diff changeset
819 case GDK_KEY_Menu:
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
820 vd->click_fd = fd;
383
e2edfa5524d4 Move some dnd common code from view_dir_list.c and view_dir_tree.c
Laurent Monin <geeqie@norz.org>
parents: 382
diff changeset
821 vd_color_set(vd, vd->click_fd, TRUE);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
822
388
5e8bef8d014a Make directory view popup menu common and move it to view_dir.{c,h}.
Laurent Monin <geeqie@norz.org>
parents: 384
diff changeset
823 vd->popup = vd_pop_menu(vd, vd->click_fd);
395
3df085acd9f9 Move common menu position callback to view_dir.c.
Laurent Monin <geeqie@norz.org>
parents: 394
diff changeset
824 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, vd_menu_position_cb, vd, 0, GDK_CURRENT_TIME);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
825
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
826 return TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
827 break;
2036
472c094c0154 changed GDK_<key> to GDK_KEY_<key>
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2034
diff changeset
828 case GDK_KEY_plus:
472c094c0154 changed GDK_<key> to GDK_KEY_<key>
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2034
diff changeset
829 case GDK_KEY_Right:
472c094c0154 changed GDK_<key> to GDK_KEY_<key>
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2034
diff changeset
830 case GDK_KEY_KP_Add:
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
831 if (fd)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
832 {
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
833 vdtree_populate_path_by_iter(vd, &iter, FALSE, vd->dir_fd);
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
834
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
835 if (islink(fd->path))
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
836 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
837 vdtree_icon_set_by_iter(vd, &iter, vd->pf->link);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
838 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
839 else
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
840 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
841 vdtree_icon_set_by_iter(vd, &iter, vd->pf->open);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
842 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
843 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
844 break;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
845 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
846
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
847 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
848 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
849
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
850 static gboolean vdtree_clicked_on_expander(GtkTreeView *treeview, GtkTreePath *tpath,
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
851 GtkTreeViewColumn *column, gint x, gint y, gint *left_of_expander)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
852 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
853 gint depth;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
854 gint size;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
855 gint sep;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
856 gint exp_width;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
857
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
858 if (column != gtk_tree_view_get_expander_column(treeview)) return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
859
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
860 gtk_widget_style_get(GTK_WIDGET(treeview), "expander-size", &size, "horizontal-separator", &sep, NULL);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
861 depth = gtk_tree_path_get_depth(tpath);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
862
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
863 exp_width = sep + size + sep;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
864
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
865 if (x <= depth * exp_width)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
866 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
867 if (left_of_expander) *left_of_expander = !(x >= (depth - 1) * exp_width);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
868 return TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
869 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
870
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
871 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
872 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
873
1452
8a37a1a4bc67 gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
874 gboolean vdtree_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
875 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
876 ViewDir *vd = data;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
877 GtkTreePath *tpath;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
878 GtkTreeViewColumn *column;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
879 GtkTreeIter iter;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
880 NodeData *nd = NULL;
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
881 FileData *fd;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
882
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
883 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
884 &tpath, &column, NULL, NULL))
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
885 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
886 GtkTreeModel *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
887 gint left_of_expander;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
888
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
889 store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
890 gtk_tree_model_get_iter(store, &iter, tpath);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
891 gtk_tree_model_get(store, &iter, DIR_COLUMN_POINTER, &nd, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
892 gtk_tree_view_set_cursor(GTK_TREE_VIEW(widget), tpath, NULL, FALSE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
893
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
894 if (vdtree_clicked_on_expander(GTK_TREE_VIEW(widget), tpath, column, bevent->x, bevent->y, &left_of_expander))
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
895 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
896 vd->click_fd = NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
897
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
898 /* clicking this region should automatically reveal an expander, if necessary
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
899 * treeview bug: the expander will not expand until a button_motion_event highlights it.
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
900 */
448
2c1500b5c933 Use explicit names for mouse buttons instead of numbers.
Laurent Monin <geeqie@norz.org>
parents: 442
diff changeset
901 if (bevent->button == MOUSE_BUTTON_LEFT &&
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
902 !left_of_expander &&
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
903 !gtk_tree_view_row_expanded(GTK_TREE_VIEW(vd->view), tpath))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
904 {
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
905 vdtree_populate_path_by_iter(vd, &iter, FALSE, vd->dir_fd);
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
906
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
907 fd = (nd) ? nd->fd : NULL;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
908 if (fd && islink(fd->path))
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
909 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
910 vdtree_icon_set_by_iter(vd, &iter, vd->pf->link);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
911 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
912 else
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
913 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
914 vdtree_icon_set_by_iter(vd, &iter, vd->pf->open);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
915 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
916 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
917
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
918 gtk_tree_path_free(tpath);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
919 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
920 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
921
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
922 gtk_tree_path_free(tpath);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
923 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
924
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
925 vd->click_fd = (nd) ? nd->fd : NULL;
383
e2edfa5524d4 Move some dnd common code from view_dir_list.c and view_dir_tree.c
Laurent Monin <geeqie@norz.org>
parents: 382
diff changeset
926 vd_color_set(vd, vd->click_fd, TRUE);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
927
448
2c1500b5c933 Use explicit names for mouse buttons instead of numbers.
Laurent Monin <geeqie@norz.org>
parents: 442
diff changeset
928 if (bevent->button == MOUSE_BUTTON_RIGHT)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
929 {
388
5e8bef8d014a Make directory view popup menu common and move it to view_dir.{c,h}.
Laurent Monin <geeqie@norz.org>
parents: 384
diff changeset
930 vd->popup = vd_pop_menu(vd, vd->click_fd);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
931 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL,
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
932 bevent->button, bevent->time);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
933 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
934
448
2c1500b5c933 Use explicit names for mouse buttons instead of numbers.
Laurent Monin <geeqie@norz.org>
parents: 442
diff changeset
935 return (bevent->button != MOUSE_BUTTON_LEFT);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
936 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
937
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
938 static void vdtree_row_expanded(GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *tpath, gpointer data)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
939 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
940 ViewDir *vd = data;
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
941 GtkTreeModel *store;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
942 NodeData *nd = NULL;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
943 FileData *fd;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
944
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
945 gtk_tree_view_set_tooltip_column(treeview, DIR_COLUMN_LINK);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
946
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
947 vdtree_populate_path_by_iter(vd, iter, FALSE, NULL);
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
948 store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
949
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
950 gtk_tree_model_get_iter(store, iter, tpath);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
951 gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
952
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
953 fd = (nd) ? nd->fd : NULL;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
954 if (fd && islink(fd->path))
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
955 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
956 vdtree_icon_set_by_iter(vd, iter, vd->pf->link);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
957 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
958 else
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
959 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
960 vdtree_icon_set_by_iter(vd, iter, vd->pf->open);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
961 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
962 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
963
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
964 static void vdtree_row_collapsed(GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *tpath, gpointer data)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
965 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
966 ViewDir *vd = data;
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
967 GtkTreeModel *store;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
968 NodeData *nd = NULL;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
969 FileData *fd;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
970
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
971 vdtree_populate_path_by_iter(vd, iter, FALSE, NULL);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
972 store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
973
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
974 gtk_tree_model_get_iter(store, iter, tpath);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
975 gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
976
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
977 fd = (nd) ? nd->fd : NULL;
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
978 if (fd && islink(fd->path))
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
979 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
980 vdtree_icon_set_by_iter(vd, iter, vd->pf->link);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
981 }
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
982 else
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
983 {
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
984 vdtree_icon_set_by_iter(vd, iter, vd->pf->close);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
985 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
986 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
987
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
988 static gint vdtree_sort_cb(GtkTreeModel *store, GtkTreeIter *a, GtkTreeIter *b, gpointer data)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
989 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
990 NodeData *nda;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
991 NodeData *ndb;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
992
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
993 gtk_tree_model_get(store, a, DIR_COLUMN_POINTER, &nda, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
994 gtk_tree_model_get(store, b, DIR_COLUMN_POINTER, &ndb, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
995
1926
776d6784c7c3 do not use FileData entries with empty path
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1802
diff changeset
996 if (!nda->fd && !ndb->fd) return 0;
776d6784c7c3 do not use FileData entries with empty path
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1802
diff changeset
997 if (!nda->fd) return 1;
776d6784c7c3 do not use FileData entries with empty path
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1802
diff changeset
998 if (!ndb->fd) return -1;
776d6784c7c3 do not use FileData entries with empty path
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1802
diff changeset
999
785
9c54f243c2c6 Use uft8_collate_key() to sort utf8 strings.
Laurent Monin <geeqie@norz.org>
parents: 783
diff changeset
1000 if (options->file_sort.case_sensitive)
819
e4a2711d7db2 fixed vdtree_sort_cb
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 785
diff changeset
1001 return strcmp(nda->fd->collate_key_name, ndb->fd->collate_key_name);
785
9c54f243c2c6 Use uft8_collate_key() to sort utf8 strings.
Laurent Monin <geeqie@norz.org>
parents: 783
diff changeset
1002 else
819
e4a2711d7db2 fixed vdtree_sort_cb
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 785
diff changeset
1003 return strcmp(nda->fd->collate_key_name_nocase, ndb->fd->collate_key_name_nocase);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1004 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1005
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1006 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1007 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1008 * core
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1009 *----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1010 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1011
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1012 static void vdtree_setup_root(ViewDir *vd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1013 {
725
ee5f1f4fd7e7 Use G_DIR_SEPARATOR_S where applicable.
Laurent Monin <geeqie@norz.org>
parents: 673
diff changeset
1014 const gchar *path = G_DIR_SEPARATOR_S;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1015 FileData *fd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1016
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 125
diff changeset
1017
1927
d1a5b8633919 always check for sidecars by readdir
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1926
diff changeset
1018 fd = file_data_new_dir(path);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1019 vdtree_add_by_data(vd, fd, NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1020
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1021 vdtree_expand_by_data(vd, fd, TRUE);
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
1022 vdtree_populate_path(vd, fd, FALSE, FALSE);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1023 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1024
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1025 static gboolean vdtree_destroy_node_cb(GtkTreeModel *store, GtkTreePath *tpath, GtkTreeIter *iter, gpointer data)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1026 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1027 NodeData *nd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1028
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1029 gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1030 vdtree_node_free(nd);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1031
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1032 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1033 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1034
401
7dc6fdbdfef9 Add some wrappers in view_dir.c and simplify even more.
Laurent Monin <geeqie@norz.org>
parents: 397
diff changeset
1035 void vdtree_destroy_cb(GtkWidget *widget, gpointer data)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1036 {
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1037 ViewDir *vd = data;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1038 GtkTreeModel *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1039
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1040 vdtree_dnd_drop_expand_cancel(vd);
394
ae99e42db2f1 Merge dirlist/dirview dnd code.
Laurent Monin <geeqie@norz.org>
parents: 389
diff changeset
1041 vd_dnd_drop_scroll_cancel(vd);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1042 widget_auto_scroll_stop(vd->view);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1043
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1044 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1045 gtk_tree_model_foreach(store, vdtree_destroy_node_cb, vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1046 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1047
783
0e45ed008a1c replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 780
diff changeset
1048 ViewDir *vdtree_new(ViewDir *vd, FileData *dir_fd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1049 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1050 GtkTreeStore *store;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1051 GtkTreeSelection *selection;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1052 GtkTreeViewColumn *column;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1053 GtkCellRenderer *renderer;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1054
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1055 vd->info = g_new0(ViewDirInfoTree, 1);
1365
087b69c56be5 When g_new0() is used, drop redundant initializations to NULL, FALSE or 0.
Laurent Monin <geeqie@norz.org>
parents: 1284
diff changeset
1056
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1057 vd->type = DIRVIEW_TREE;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 407
diff changeset
1058
407
f441b932ed5c Rename vd_drop_update() to vd_dnd_drop_update().
Laurent Monin <geeqie@norz.org>
parents: 406
diff changeset
1059 vd->dnd_drop_leave_func = vdtree_dnd_drop_expand_cancel;
f441b932ed5c Rename vd_drop_update() to vd_dnd_drop_update().
Laurent Monin <geeqie@norz.org>
parents: 406
diff changeset
1060 vd->dnd_drop_update_func = vdtree_dnd_drop_expand;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1061
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
1062 store = gtk_tree_store_new(6, G_TYPE_POINTER, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1063 vd->view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1064 g_object_unref(store);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1065
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1066 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(vd->view), FALSE);
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1067 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(vd->view), FALSE);
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1068 gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(store), vdtree_sort_cb, vd, NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1069 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store),
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1070 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1071
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1072 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vd->view));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1073 gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1074 gtk_tree_selection_set_select_function(selection, vdtree_select_cb, vd, NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1075
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1076 column = gtk_tree_view_column_new();
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1077 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1078
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1079 renderer = gtk_cell_renderer_pixbuf_new();
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1080 gtk_tree_view_column_pack_start(column, renderer, FALSE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1081 gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", DIR_COLUMN_ICON);
396
039f140aa8dc Merge few more functions to view_dir.c.
Laurent Monin <geeqie@norz.org>
parents: 395
diff changeset
1082 gtk_tree_view_column_set_cell_data_func(column, renderer, vd_color_cb, vd, NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1083
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1084 renderer = gtk_cell_renderer_text_new();
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1085 gtk_tree_view_column_pack_start(column, renderer, TRUE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1086 gtk_tree_view_column_add_attribute(column, renderer, "text", DIR_COLUMN_NAME);
396
039f140aa8dc Merge few more functions to view_dir.c.
Laurent Monin <geeqie@norz.org>
parents: 395
diff changeset
1087 gtk_tree_view_column_set_cell_data_func(column, renderer, vd_color_cb, vd, NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1088
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1089 gtk_tree_view_append_column(GTK_TREE_VIEW(vd->view), column);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1090
2855
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
1091 gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(vd->view), DIR_COLUMN_LINK);
009f0a811472 Fix #642: If a folder is a link, use an icon to indicate it is a link
Colin Clark <colin.clark@cclark.uk>
parents: 2392
diff changeset
1092
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1093 vdtree_setup_root(vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1094
405
d64659c27a88 Fix forgotten vd->pf affectation.
Laurent Monin <geeqie@norz.org>
parents: 401
diff changeset
1095 g_signal_connect(G_OBJECT(vd->view), "row_expanded",
d64659c27a88 Fix forgotten vd->pf affectation.
Laurent Monin <geeqie@norz.org>
parents: 401
diff changeset
1096 G_CALLBACK(vdtree_row_expanded), vd);
d64659c27a88 Fix forgotten vd->pf affectation.
Laurent Monin <geeqie@norz.org>
parents: 401
diff changeset
1097 g_signal_connect(G_OBJECT(vd->view), "row_collapsed",
d64659c27a88 Fix forgotten vd->pf affectation.
Laurent Monin <geeqie@norz.org>
parents: 401
diff changeset
1098 G_CALLBACK(vdtree_row_collapsed), vd);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1099
382
2d6110a20e8a Rename vdt occurences to vd.
Laurent Monin <geeqie@norz.org>
parents: 380
diff changeset
1100 return vd;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1101 }
1055
4bbdfab3c89a Adding a vim modeline to all files - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 995
diff changeset
1102 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */