Mercurial > hg > forks > geeqie
annotate src/view_dir_list.c @ 2884:f9a21c9891a0
Fix #658: Bug fix: reads of uninitialized data
https://github.com/BestImageViewer/geeqie/pull/658
author | Rinat Ibragimov <ibragimovrinat@mail.ru> |
---|---|
date | Mon, 21 Jan 2019 11:54:49 +0000 |
parents | 009f0a811472 |
children |
rev | line source |
---|---|
9 | 1 /* |
2350
95507e596256
Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2265
diff
changeset
|
2 * Copyright (C) 2004 John Ellis |
95507e596256
Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2265
diff
changeset
|
3 * Copyright (C) 2008 - 2016 The Geeqie Team |
9 | 4 * |
5 * Author: John Ellis | |
6 * | |
2350
95507e596256
Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2265
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:
2265
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:
2265
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:
2265
diff
changeset
|
10 * (at your option) any later version. |
95507e596256
Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2265
diff
changeset
|
11 * |
95507e596256
Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2265
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:
2265
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:
2265
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
95507e596256
Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2265
diff
changeset
|
15 * GNU General Public License for more details. |
95507e596256
Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2265
diff
changeset
|
16 * |
95507e596256
Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2265
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:
2265
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:
2265
diff
changeset
|
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
9 | 20 */ |
21 | |
281 | 22 #include "main.h" |
9 | 23 #include "view_dir_list.h" |
24 | |
25 #include "dnd.h" | |
26 #include "dupe.h" | |
586
122fc2223b42
split filelist.c to filefilter.c and filedata.c
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
475
diff
changeset
|
27 #include "filedata.h" |
9 | 28 #include "layout.h" |
29 #include "layout_image.h" | |
30 #include "layout_util.h" | |
31 #include "utilops.h" | |
32 #include "ui_fileops.h" | |
33 #include "ui_menu.h" | |
34 #include "ui_tree_edit.h" | |
380
41079d11eba7
Introduce a new struct ViewDir to handle directory views common
Laurent Monin <geeqie@norz.org>
parents:
373
diff
changeset
|
35 #include "view_dir.h" |
9 | 36 |
37 #include <gdk/gdkkeysyms.h> /* for keyboard values */ | |
38 | |
39 | |
979 | 40 #define VDLIST(_vd_) ((ViewDirInfoList *)(_vd_->info)) |
9 | 41 |
42 | |
43 /* | |
44 *----------------------------------------------------------------------------- | |
45 * misc | |
46 *----------------------------------------------------------------------------- | |
47 */ | |
48 | |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
49 gboolean vdlist_find_row(ViewDir *vd, FileData *fd, GtkTreeIter *iter) |
9 | 50 { |
51 GtkTreeModel *store; | |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
52 gboolean valid; |
9 | 53 |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
54 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)); |
9 | 55 valid = gtk_tree_model_get_iter_first(store, iter); |
56 while (valid) | |
57 { | |
58 FileData *fd_n; | |
59 gtk_tree_model_get(GTK_TREE_MODEL(store), iter, DIR_COLUMN_POINTER, &fd_n, -1); | |
1501
9ea21d03c41d
fixed vdlist_find_row return value
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1452
diff
changeset
|
60 if (fd_n == fd) return TRUE; |
9 | 61 |
62 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), iter); | |
63 } | |
64 | |
1501
9ea21d03c41d
fixed vdlist_find_row return value
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1452
diff
changeset
|
65 return FALSE; |
9 | 66 } |
67 | |
68 | |
388
5e8bef8d014a
Make directory view popup menu common and move it to view_dir.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
385
diff
changeset
|
69 FileData *vdlist_row_by_path(ViewDir *vd, const gchar *path, gint *row) |
9 | 70 { |
71 GList *work; | |
72 gint n; | |
73 | |
74 if (!path) | |
75 { | |
76 if (row) *row = -1; | |
77 return NULL; | |
78 } | |
79 | |
80 n = 0; | |
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:
973
diff
changeset
|
81 work = VDLIST(vd)->list; |
9 | 82 while (work) |
83 { | |
84 FileData *fd = work->data; | |
85 if (strcmp(fd->path, path) == 0) | |
86 { | |
87 if (row) *row = n; | |
88 return fd; | |
89 } | |
90 work = work->next; | |
91 n++; | |
92 } | |
93 | |
94 if (row) *row = -1; | |
95 return NULL; | |
96 } | |
97 | |
98 /* | |
99 *----------------------------------------------------------------------------- | |
100 * dnd | |
101 *----------------------------------------------------------------------------- | |
102 */ | |
103 | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
104 static void vdlist_scroll_to_row(ViewDir *vd, FileData *fd, gfloat y_align) |
9 | 105 { |
106 GtkTreeIter iter; | |
107 | |
1810
c3a79dda8ea7
GTK marks several functions as deprecated
Klaus Ethgen <Klaus@Ethgen.de>
parents:
1802
diff
changeset
|
108 if (gtk_widget_get_realized(vd->view) && vd_find_row(vd, fd, &iter)) |
9 | 109 { |
110 GtkTreeModel *store; | |
111 GtkTreePath *tpath; | |
112 | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
113 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)); |
9 | 114 tpath = gtk_tree_model_get_path(store, &iter); |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
115 gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(vd->view), tpath, NULL, TRUE, y_align, 0.0); |
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
116 gtk_tree_view_set_cursor(GTK_TREE_VIEW(vd->view), tpath, NULL, FALSE); |
9 | 117 gtk_tree_path_free(tpath); |
118 | |
1810
c3a79dda8ea7
GTK marks several functions as deprecated
Klaus Ethgen <Klaus@Ethgen.de>
parents:
1802
diff
changeset
|
119 if (!gtk_widget_has_focus(vd->view)) gtk_widget_grab_focus(vd->view); |
9 | 120 } |
121 } | |
122 | |
123 /* | |
124 *----------------------------------------------------------------------------- | |
125 * main | |
126 *----------------------------------------------------------------------------- | |
442 | 127 */ |
9 | 128 |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
129 const gchar *vdlist_row_get_path(ViewDir *vd, gint row) |
9 | 130 { |
131 FileData *fd; | |
132 | |
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:
973
diff
changeset
|
133 fd = g_list_nth_data(VDLIST(vd)->list, row); |
9 | 134 |
135 if (fd) return fd->path; | |
136 | |
137 return NULL; | |
138 } | |
139 | |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
140 static gboolean vdlist_populate(ViewDir *vd, gboolean clear) |
9 | 141 { |
142 GtkListStore *store; | |
143 GList *work; | |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
144 GtkTreeIter iter; |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
145 gboolean valid; |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
146 gchar *filepath; |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
147 GList *old_list; |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
148 gboolean ret; |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
149 FileData *fd; |
1780
d6c1096724ef
Store sort parameters in appropriate variables.
Laurent Monin <geeqie@norz.org>
parents:
1628
diff
changeset
|
150 SortType sort_type = SORT_NAME; |
d6c1096724ef
Store sort parameters in appropriate variables.
Laurent Monin <geeqie@norz.org>
parents:
1628
diff
changeset
|
151 gboolean sort_ascend = TRUE; |
2884
f9a21c9891a0
Fix #658: Bug fix: reads of uninitialized data
Rinat Ibragimov <ibragimovrinat@mail.ru>
parents:
2855
diff
changeset
|
152 gchar *link = NULL; |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
153 |
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:
973
diff
changeset
|
154 old_list = VDLIST(vd)->list; |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
155 |
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:
973
diff
changeset
|
156 ret = filelist_read(vd->dir_fd, NULL, &VDLIST(vd)->list); |
1780
d6c1096724ef
Store sort parameters in appropriate variables.
Laurent Monin <geeqie@norz.org>
parents:
1628
diff
changeset
|
157 VDLIST(vd)->list = filelist_sort(VDLIST(vd)->list, sort_type, sort_ascend); |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
158 |
2265
15d51cf8ff3d
Allow to choose to show parent folder
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2263
diff
changeset
|
159 /* add . and .. */ |
15d51cf8ff3d
Allow to choose to show parent folder
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2263
diff
changeset
|
160 |
15d51cf8ff3d
Allow to choose to show parent folder
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2263
diff
changeset
|
161 if (options->file_filter.show_parent_directory && strcmp(vd->dir_fd->path, G_DIR_SEPARATOR_S) != 0) |
15d51cf8ff3d
Allow to choose to show parent folder
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2263
diff
changeset
|
162 { |
15d51cf8ff3d
Allow to choose to show parent folder
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2263
diff
changeset
|
163 filepath = g_build_filename(vd->dir_fd->path, "..", NULL); |
15d51cf8ff3d
Allow to choose to show parent folder
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2263
diff
changeset
|
164 fd = file_data_new_dir(filepath); |
15d51cf8ff3d
Allow to choose to show parent folder
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2263
diff
changeset
|
165 VDLIST(vd)->list = g_list_prepend(VDLIST(vd)->list, fd); |
15d51cf8ff3d
Allow to choose to show parent folder
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2263
diff
changeset
|
166 g_free(filepath); |
15d51cf8ff3d
Allow to choose to show parent folder
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2263
diff
changeset
|
167 } |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
168 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
169 if (options->file_filter.show_dot_directory) |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
170 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
171 filepath = g_build_filename(vd->dir_fd->path, ".", NULL); |
1927
d1a5b8633919
always check for sidecars by readdir
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1810
diff
changeset
|
172 fd = file_data_new_dir(filepath); |
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:
973
diff
changeset
|
173 VDLIST(vd)->list = g_list_prepend(VDLIST(vd)->list, fd); |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
174 g_free(filepath); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
175 } |
9 | 176 |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
177 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view))); |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
178 if (clear) gtk_list_store_clear(store); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
179 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
180 valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(store), &iter, NULL); |
9 | 181 |
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:
973
diff
changeset
|
182 work = VDLIST(vd)->list; |
9 | 183 while (work) |
184 { | |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
185 gint match; |
9 | 186 GdkPixbuf *pixbuf; |
825
7e4718cfe2a2
Optionnally display directory's date in list view.
Laurent Monin <geeqie@norz.org>
parents:
783
diff
changeset
|
187 const gchar *date = ""; |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
188 gboolean done = FALSE; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2095
diff
changeset
|
189 |
9 | 190 fd = work->data; |
191 | |
192 if (access_file(fd->path, R_OK | X_OK) && fd->name) | |
193 { | |
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:
2637
diff
changeset
|
194 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:
2637
diff
changeset
|
195 { |
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:
2637
diff
changeset
|
196 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:
2637
diff
changeset
|
197 } |
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:
2637
diff
changeset
|
198 else if (fd->name[0] == '.' && fd->name[1] == '\0') |
9 | 199 { |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
200 pixbuf = vd->pf->open; |
9 | 201 } |
202 else if (fd->name[0] == '.' && fd->name[1] == '.' && fd->name[2] == '\0') | |
203 { | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
204 pixbuf = vd->pf->parent; |
9 | 205 } |
206 else | |
207 { | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
208 pixbuf = vd->pf->close; |
1436
13d61fe760fb
completely separated global and layout window options
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1365
diff
changeset
|
209 if (vd->layout && vd->layout->options.show_directory_date) |
825
7e4718cfe2a2
Optionnally display directory's date in list view.
Laurent Monin <geeqie@norz.org>
parents:
783
diff
changeset
|
210 date = text_from_time(fd->date); |
9 | 211 } |
212 } | |
213 else | |
214 { | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
215 pixbuf = vd->pf->deny; |
9 | 216 } |
217 | |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
218 while (!done) |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
219 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
220 FileData *old_fd = NULL; |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
221 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
222 if (valid) |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
223 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
224 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
225 DIR_COLUMN_POINTER, &old_fd, |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
226 -1); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
227 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
228 if (fd == old_fd) |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
229 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
230 match = 0; |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
231 } |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
232 else |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
233 { |
1780
d6c1096724ef
Store sort parameters in appropriate variables.
Laurent Monin <geeqie@norz.org>
parents:
1628
diff
changeset
|
234 match = filelist_sort_compare_filedata_full(fd, old_fd, sort_type, sort_ascend); |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
235 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
236 if (match == 0) g_warning("multiple fd for the same path"); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
237 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2095
diff
changeset
|
238 |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
239 } |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
240 else |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
241 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
242 match = -1; |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
243 } |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
244 |
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:
2637
diff
changeset
|
245 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:
2637
diff
changeset
|
246 { |
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:
2637
diff
changeset
|
247 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:
2637
diff
changeset
|
248 } |
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:
2637
diff
changeset
|
249 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:
2637
diff
changeset
|
250 { |
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:
2637
diff
changeset
|
251 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:
2637
diff
changeset
|
252 } |
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:
2637
diff
changeset
|
253 |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
254 if (match < 0) |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
255 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
256 GtkTreeIter new; |
9 | 257 |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
258 if (valid) |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
259 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
260 gtk_list_store_insert_before(store, &new, &iter); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
261 } |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
262 else |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
263 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
264 gtk_list_store_append(store, &new); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
265 } |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
266 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
267 gtk_list_store_set(store, &new, |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
268 DIR_COLUMN_POINTER, fd, |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
269 DIR_COLUMN_ICON, pixbuf, |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
270 DIR_COLUMN_NAME, 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:
2637
diff
changeset
|
271 DIR_COLUMN_LINK, link, |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
272 DIR_COLUMN_DATE, date, |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
273 -1); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
274 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
275 done = TRUE; |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
276 } |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
277 else if (match > 0) |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
278 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
279 valid = gtk_list_store_remove(store, &iter); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
280 } |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
281 else |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
282 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
283 gtk_list_store_set(store, &iter, |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
284 DIR_COLUMN_ICON, pixbuf, |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
285 DIR_COLUMN_NAME, 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:
2637
diff
changeset
|
286 DIR_COLUMN_LINK, link, |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
287 DIR_COLUMN_DATE, date, |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
288 -1); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
289 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
290 if (valid) valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
291 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
292 done = TRUE; |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
293 } |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
294 } |
9 | 295 work = work->next; |
296 } | |
297 | |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
298 while (valid) |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
299 { |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
300 FileData *old_fd; |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
301 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, DIR_COLUMN_POINTER, &old_fd, -1); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
302 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
303 valid = gtk_list_store_remove(store, &iter); |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
304 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2095
diff
changeset
|
305 |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
306 |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
307 vd->click_fd = NULL; |
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
308 vd->drop_fd = NULL; |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
309 |
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
310 filelist_free(old_list); |
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:
2637
diff
changeset
|
311 g_free(link); |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
312 return ret; |
9 | 313 } |
314 | |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
315 gboolean vdlist_set_fd(ViewDir *vd, FileData *dir_fd) |
9 | 316 { |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
317 gboolean ret; |
1940 | 318 gchar *old_path = NULL; /* Used to store directory for walking up */ |
9 | 319 |
783
0e45ed008a1c
replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
780
diff
changeset
|
320 if (!dir_fd) return FALSE; |
0e45ed008a1c
replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
780
diff
changeset
|
321 if (vd->dir_fd == dir_fd) return TRUE; |
9 | 322 |
783
0e45ed008a1c
replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
780
diff
changeset
|
323 if (vd->dir_fd) |
9 | 324 { |
325 gchar *base; | |
326 | |
783
0e45ed008a1c
replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
780
diff
changeset
|
327 base = remove_level_from_path(vd->dir_fd->path); |
0e45ed008a1c
replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
780
diff
changeset
|
328 if (strcmp(base, dir_fd->path) == 0) |
9 | 329 { |
1940 | 330 old_path = g_strdup(filename_from_path(vd->dir_fd->path)); |
9 | 331 } |
332 g_free(base); | |
333 } | |
334 | |
783
0e45ed008a1c
replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
780
diff
changeset
|
335 file_data_unref(vd->dir_fd); |
0e45ed008a1c
replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
780
diff
changeset
|
336 vd->dir_fd = file_data_ref(dir_fd); |
9 | 337 |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
338 ret = vdlist_populate(vd, TRUE); |
9 | 339 |
2637
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
340 /* scroll to make last path visible */ |
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
341 FileData *found = NULL; |
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
342 GList *work; |
9 | 343 |
2637
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
344 work = VDLIST(vd)->list; |
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
345 while (work && !found) |
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
346 { |
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
347 FileData *fd = work->data; |
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
348 if (!old_path || strcmp(old_path, fd->name) == 0) found = fd; |
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
349 work = work->next; |
9 | 350 } |
351 | |
2637
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
352 if (found) vdlist_scroll_to_row(vd, found, 0.5); |
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
353 |
78ab69af0d91
Fix #356: Select dirlist when entering a directory
unqwist <>
parents:
2376
diff
changeset
|
354 if (old_path) g_free(old_path); |
9 | 355 |
356 return ret; | |
357 } | |
358 | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
359 void vdlist_refresh(ViewDir *vd) |
9 | 360 { |
973
38ba89b95ee8
improved refresh in view_dir_list
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
902
diff
changeset
|
361 vdlist_populate(vd, FALSE); |
9 | 362 } |
363 | |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
364 gboolean vdlist_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) |
9 | 365 { |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
366 ViewDir *vd = data; |
9 | 367 GtkTreePath *tpath; |
442 | 368 |
2036
472c094c0154
changed GDK_<key> to GDK_KEY_<key>
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
2021
diff
changeset
|
369 if (event->keyval != GDK_KEY_Menu) return FALSE; |
9 | 370 |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
371 gtk_tree_view_get_cursor(GTK_TREE_VIEW(vd->view), &tpath, NULL); |
9 | 372 if (tpath) |
373 { | |
374 GtkTreeModel *store; | |
375 GtkTreeIter iter; | |
376 | |
377 store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); | |
378 gtk_tree_model_get_iter(store, &iter, tpath); | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
379 gtk_tree_model_get(store, &iter, DIR_COLUMN_POINTER, &vd->click_fd, -1); |
442 | 380 |
9 | 381 gtk_tree_path_free(tpath); |
382 } | |
383 else | |
384 { | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
385 vd->click_fd = NULL; |
9 | 386 } |
387 | |
383
e2edfa5524d4
Move some dnd common code from view_dir_list.c and view_dir_tree.c
Laurent Monin <geeqie@norz.org>
parents:
381
diff
changeset
|
388 vd_color_set(vd, vd->click_fd, TRUE); |
9 | 389 |
388
5e8bef8d014a
Make directory view popup menu common and move it to view_dir.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
385
diff
changeset
|
390 vd->popup = vd_pop_menu(vd, vd->click_fd); |
9 | 391 |
395
3df085acd9f9
Move common menu position callback to view_dir.c.
Laurent Monin <geeqie@norz.org>
parents:
394
diff
changeset
|
392 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, vd_menu_position_cb, vd, 0, GDK_CURRENT_TIME); |
9 | 393 |
394 return TRUE; | |
395 } | |
396 | |
1452
8a37a1a4bc67
gint -> gboolean where applicable.
Laurent Monin <geeqie@norz.org>
parents:
1437
diff
changeset
|
397 gboolean vdlist_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) |
9 | 398 { |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
399 ViewDir *vd = data; |
9 | 400 GtkTreePath *tpath; |
401 GtkTreeIter iter; | |
402 FileData *fd = NULL; | |
403 | |
404 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y, | |
405 &tpath, NULL, NULL, NULL)) | |
406 { | |
407 GtkTreeModel *store; | |
408 | |
409 store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); | |
410 gtk_tree_model_get_iter(store, &iter, tpath); | |
411 gtk_tree_model_get(store, &iter, DIR_COLUMN_POINTER, &fd, -1); | |
412 gtk_tree_view_set_cursor(GTK_TREE_VIEW(widget), tpath, NULL, FALSE); | |
413 gtk_tree_path_free(tpath); | |
414 } | |
415 | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
416 vd->click_fd = fd; |
2376
6c310168a91c
Add four new preferences
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents:
2350
diff
changeset
|
417 |
6c310168a91c
Add four new preferences
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents:
2350
diff
changeset
|
418 if (options->view_dir_list_single_click_enter) |
6c310168a91c
Add four new preferences
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents:
2350
diff
changeset
|
419 vd_color_set(vd, vd->click_fd, TRUE); |
9 | 420 |
448
2c1500b5c933
Use explicit names for mouse buttons instead of numbers.
Laurent Monin <geeqie@norz.org>
parents:
442
diff
changeset
|
421 if (bevent->button == MOUSE_BUTTON_RIGHT) |
9 | 422 { |
388
5e8bef8d014a
Make directory view popup menu common and move it to view_dir.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
385
diff
changeset
|
423 vd->popup = vd_pop_menu(vd, vd->click_fd); |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
424 gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL, |
9 | 425 bevent->button, bevent->time); |
2376
6c310168a91c
Add four new preferences
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents:
2350
diff
changeset
|
426 return TRUE; |
9 | 427 } |
428 | |
2376
6c310168a91c
Add four new preferences
Maciej S. Szmigiero <mail@maciej.szmigiero.name>
parents:
2350
diff
changeset
|
429 return options->view_dir_list_single_click_enter; |
9 | 430 } |
431 | |
401
7dc6fdbdfef9
Add some wrappers in view_dir.c and simplify even more.
Laurent Monin <geeqie@norz.org>
parents:
397
diff
changeset
|
432 void vdlist_destroy_cb(GtkWidget *widget, gpointer data) |
9 | 433 { |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
434 ViewDir *vd = data; |
9 | 435 |
394
ae99e42db2f1
Merge dirlist/dirview dnd code.
Laurent Monin <geeqie@norz.org>
parents:
389
diff
changeset
|
436 vd_dnd_drop_scroll_cancel(vd); |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
437 widget_auto_scroll_stop(vd->view); |
9 | 438 |
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:
973
diff
changeset
|
439 filelist_free(VDLIST(vd)->list); |
9 | 440 } |
441 | |
783
0e45ed008a1c
replaced directory path with FileData* dir_fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
780
diff
changeset
|
442 ViewDir *vdlist_new(ViewDir *vd, FileData *dir_fd) |
9 | 443 { |
444 GtkListStore *store; | |
445 GtkTreeSelection *selection; | |
446 GtkTreeViewColumn *column; | |
447 GtkCellRenderer *renderer; | |
448 | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
449 vd->info = g_new0(ViewDirInfoList, 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
|
450 |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
451 vd->type = DIRVIEW_LIST; |
9 | 452 |
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:
2637
diff
changeset
|
453 store = gtk_list_store_new(6, G_TYPE_POINTER, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING); |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
454 vd->view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); |
9 | 455 g_object_unref(store); |
456 | |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
457 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(vd->view), FALSE); |
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
458 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(vd->view), FALSE); |
9 | 459 |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
460 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vd->view)); |
9 | 461 gtk_tree_selection_set_mode(selection, GTK_SELECTION_NONE); |
462 | |
463 column = gtk_tree_view_column_new(); | |
464 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); | |
465 | |
466 renderer = gtk_cell_renderer_pixbuf_new(); | |
467 gtk_tree_view_column_pack_start(column, renderer, FALSE); | |
468 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
|
469 gtk_tree_view_column_set_cell_data_func(column, renderer, vd_color_cb, vd, NULL); |
9 | 470 |
471 renderer = gtk_cell_renderer_text_new(); | |
472 gtk_tree_view_column_pack_start(column, renderer, TRUE); | |
473 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
|
474 gtk_tree_view_column_set_cell_data_func(column, renderer, vd_color_cb, vd, NULL); |
9 | 475 |
825
7e4718cfe2a2
Optionnally display directory's date in list view.
Laurent Monin <geeqie@norz.org>
parents:
783
diff
changeset
|
476 renderer = gtk_cell_renderer_text_new(); |
7e4718cfe2a2
Optionnally display directory's date in list view.
Laurent Monin <geeqie@norz.org>
parents:
783
diff
changeset
|
477 gtk_tree_view_column_pack_start(column, renderer, TRUE); |
7e4718cfe2a2
Optionnally display directory's date in list view.
Laurent Monin <geeqie@norz.org>
parents:
783
diff
changeset
|
478 gtk_tree_view_column_add_attribute(column, renderer, "text", DIR_COLUMN_DATE); |
7e4718cfe2a2
Optionnally display directory's date in list view.
Laurent Monin <geeqie@norz.org>
parents:
783
diff
changeset
|
479 gtk_tree_view_column_set_cell_data_func(column, renderer, vd_color_cb, vd, NULL); |
7e4718cfe2a2
Optionnally display directory's date in list view.
Laurent Monin <geeqie@norz.org>
parents:
783
diff
changeset
|
480 |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
481 gtk_tree_view_append_column(GTK_TREE_VIEW(vd->view), column); |
9 | 482 |
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:
2637
diff
changeset
|
483 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:
2637
diff
changeset
|
484 |
381
251f28367abb
Rename vdl occurences to vd.
Laurent Monin <geeqie@norz.org>
parents:
380
diff
changeset
|
485 return vd; |
9 | 486 } |
1055
4bbdfab3c89a
Adding a vim modeline to all files - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
995
diff
changeset
|
487 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ |