annotate src/filelist.c @ 1:b3e0e515fabf

Initial revision
author gqview
date Mon, 03 Apr 2000 18:24:05 +0000
parents
children c0e337a01cb7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
2 * GQview image viewer
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
3 * (C)1999 John Ellis
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
4 *
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
5 * Author: John Ellis
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
6 *
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
7 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
8
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
9 #include "gqview.h"
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
10
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
11 static gint filelist_click_row = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
12
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
13 static void update_progressbar(gfloat val);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
14
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
15 static gint file_is_hidden(gchar *name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
16 static gint file_is_in_filter(gchar *name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
17 static void add_to_filter(gchar *text, gint add);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
18
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
19 static gint sort_list_cb(void *a, void *b);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
20 static void filelist_read(gchar *path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
21
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
22 static gint file_find_closest_unaccounted(gint row, gint count, GList *ignore_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
23
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
24 static void history_menu_select_cb(GtkWidget *widget, gpointer data);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
25 static gchar *truncate_hist_text(gchar *t, gint l);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
26 static void filelist_set_history(gchar *path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
27
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
28 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
29 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
30 * file status information (private)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
31 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
32 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
33
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
34 static void update_progressbar(gfloat val)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
35 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
36 gtk_progress_bar_update (GTK_PROGRESS_BAR(info_progress_bar), val);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
37 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
38
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
39 void update_status_label(gchar *text)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
40 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
41 gchar *buf;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
42 gint count;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
43 gchar *ss = "";
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
44
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
45 if (text)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
46 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
47 gtk_label_set(GTK_LABEL(info_status), text);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
48 return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
49 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
50
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
51 if (slideshow_is_running()) ss = _(" Slideshow");
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
52
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
53 count = file_selection_count();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
54 if (count > 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
55 buf = g_strdup_printf(_("%d files (%d)%s"), file_count(), count, ss);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
56 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
57 buf = g_strdup_printf(_("%d files%s"), file_count(), ss);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
58
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
59 gtk_label_set(GTK_LABEL(info_status), buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
60 g_free(buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
61 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
62
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
63 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
64 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
65 * file filtering
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
66 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
67 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
68
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
69 static gint file_is_hidden(gchar *name)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
70 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
71 if (name[0] != '.') return FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
72 if (name[1] == '\0' || (name[1] == '.' && name[2] == '\0')) return FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
73 return TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
74 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
75
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
76 static gint file_is_in_filter(gchar *name)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
77 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
78 GList *work;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
79 if (!filename_filter || file_filter_disable) return TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
80
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
81 work = filename_filter;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
82 while (work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
83 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
84 gchar *filter = work->data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
85 gint lf = strlen(filter);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
86 gint ln = strlen(name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
87 if (ln >= lf)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
88 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
89 if (strncasecmp(name + ln - lf, filter, lf) == 0) return TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
90 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
91 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
92 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
93
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
94 return FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
95 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
96
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
97 static void add_to_filter(gchar *text, gint add)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
98 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
99 if (add) filename_filter = g_list_append(filename_filter, g_strdup(text));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
100 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
101
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
102 void rebuild_file_filter()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
103 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
104 if (filename_filter)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
105 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
106 g_list_foreach(filename_filter,(GFunc)g_free,NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
107 g_list_free(filename_filter);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
108 filename_filter = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
109 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
110
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
111 add_to_filter(".jpg", filter_include_jpg);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
112 add_to_filter(".jpeg", filter_include_jpg);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
113 add_to_filter(".xpm", filter_include_xpm);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
114 add_to_filter(".tif", filter_include_tif);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
115 add_to_filter(".tiff", filter_include_tif);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
116 add_to_filter(".gif", filter_include_gif);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
117 add_to_filter(".png", filter_include_png);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
118 add_to_filter(".ppm", filter_include_ppm);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
119 add_to_filter(".pgm", filter_include_pgm);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
120 add_to_filter(".pcx", filter_include_pcx);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
121 add_to_filter(".bmp", filter_include_bmp);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
122
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
123 if (custom_filter)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
124 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
125 gchar *buf = g_strdup(custom_filter);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
126 gchar *pos_ptr_b;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
127 gchar *pos_ptr_e = custom_filter;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
128 while(pos_ptr_e[0] != '\0')
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
129 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
130 pos_ptr_b = pos_ptr_e;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
131 while (pos_ptr_e[0] != ';' && pos_ptr_e[0] != '\0') pos_ptr_e++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
132 if (pos_ptr_e[0] == ';')
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
133 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
134 pos_ptr_e[0] = '\0';
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
135 pos_ptr_e++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
136 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
137 add_to_filter(pos_ptr_b, TRUE);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
138 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
139 g_free(buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
140 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
141 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
142
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
143 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
144 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
145 * load file list (private)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
146 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
147 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
148
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
149 static gint sort_list_cb(void *a, void *b)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
150 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
151 return strcmp((gchar *)a, (gchar *)b);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
152 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
153
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
154 static void filelist_read(gchar *path)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
155 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
156 DIR *dp;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
157 struct dirent *dir;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
158 struct stat ent_sbuf;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
159
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
160 if((dp = opendir(path))==NULL)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
161 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
162 /* dir not found */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
163 return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
164 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
165
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
166 g_list_foreach(dir_list,(GFunc)g_free,NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
167 g_list_free(dir_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
168 dir_list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
169
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
170 g_list_foreach(file_list,(GFunc)g_free,NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
171 g_list_free(file_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
172 file_list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
173
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
174 while ((dir = readdir(dp)) != NULL)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
175 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
176 /* skips removed files */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
177 if (dir->d_ino > 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
178 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
179 gchar *name = dir->d_name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
180 if (show_dot_files || !file_is_hidden(name))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
181 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
182 gchar *filepath = g_strconcat(path, "/", name, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
183 if (stat(filepath,&ent_sbuf) >= 0 && S_ISDIR(ent_sbuf.st_mode))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
184 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
185 dir_list = g_list_prepend(dir_list, g_strdup(name));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
186 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
187 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
188 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
189 if (file_is_in_filter(name))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
190 file_list = g_list_prepend(file_list, g_strdup(name));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
191 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
192 g_free(filepath);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
193 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
194 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
195 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
196
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
197 closedir(dp);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
198
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
199 dir_list = g_list_sort(dir_list, (GCompareFunc) sort_list_cb);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
200 file_list = g_list_sort(file_list, (GCompareFunc) sort_list_cb);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
201 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
202
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
203 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
204 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
205 * file list utilities to retrieve information (public)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
206 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
207 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
208
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
209 gint file_count()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
210 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
211 return g_list_length(file_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
212 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
213
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
214 gint file_selection_count()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
215 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
216 gint count = 0;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
217 GList *work = GTK_CLIST(file_clist)->selection;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
218 while(work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
219 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
220 count++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
221 if (debug) printf("s = %d\n", GPOINTER_TO_INT(work->data));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
222 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
223 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
224
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
225 if (debug) printf("files selected = %d\n", count);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
226
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
227 return count;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
228 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
229
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
230 gint find_file_in_list(gchar *path)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
231 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
232 GList *work = file_list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
233 gchar *buf;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
234 gchar *name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
235 gint count = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
236
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
237 if (!path) return -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
238
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
239 buf = remove_level_from_path(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
240 if (strcmp(buf, current_path) != 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
241 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
242 g_free(buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
243 return -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
244 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
245 g_free(buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
246
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
247 name = filename_from_path(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
248 while(work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
249 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
250 count++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
251 if (strcmp(name, work->data) == 0) return count;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
252 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
253 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
254
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
255 return -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
256 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
257
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
258 gchar *file_get_path(gint row)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
259 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
260 gchar *path = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
261 gchar *name = gtk_clist_get_row_data(GTK_CLIST(file_clist), row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
262
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
263 if (name) path = g_strconcat(current_path, "/", name, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
264
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
265 return path;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
266 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
267
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
268 gint file_is_selected(gint row)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
269 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
270 GList *work = GTK_CLIST(file_clist)->selection;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
271
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
272 while(work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
273 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
274 if (GPOINTER_TO_INT(work->data) == row) return TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
275 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
276 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
277
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
278 return FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
279 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
280
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
281 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
282 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
283 * utilities to retrieve list of selected files (public)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
284 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
285 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
286
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
287 GList *file_get_selected_list()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
288 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
289 GList *list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
290 GList *work = GTK_CLIST(file_clist)->selection;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
291
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
292 while(work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
293 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
294 gchar *name = gtk_clist_get_row_data(GTK_CLIST(file_clist),
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
295 GPOINTER_TO_INT(work->data));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
296 list = g_list_prepend(list, g_strconcat(current_path, "/", name, NULL));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
297 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
298 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
299
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
300 list = g_list_reverse(list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
301
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
302 return list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
303 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
304
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
305 void free_selected_list(GList *list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
306 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
307 g_list_foreach(list, (GFunc)g_free, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
308 g_list_free(list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
309 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
310
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
311 gint file_clicked_is_selected()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
312 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
313 return file_is_selected(filelist_click_row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
314 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
315
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
316 gchar *file_clicked_get_path()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
317 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
318 return file_get_path(filelist_click_row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
319 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
320
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
321 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
322 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
323 * image change routines
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
324 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
325 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
326
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
327 void file_image_change_to(gint row)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
328 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
329 gtk_clist_unselect_all(GTK_CLIST(file_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
330 gtk_clist_select_row(GTK_CLIST(file_clist), row, -1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
331 if (gtk_clist_row_is_visible(GTK_CLIST(file_clist), row) != GTK_VISIBILITY_FULL)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
332 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
333 gtk_clist_moveto(GTK_CLIST(file_clist), row, -1, 0.5, 0.0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
334 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
335 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
336
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
337 void file_next_image()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
338 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
339 gint current = find_file_in_list(image_get_path());
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
340 gint total = file_count();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
341
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
342 if (current >= 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
343 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
344 if (current < total - 1)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
345 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
346 file_image_change_to(current + 1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
347 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
348 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
349 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
350 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
351 file_image_change_to(0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
352 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
353 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
354
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
355 void file_prev_image()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
356 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
357 gint current = find_file_in_list(image_get_path());
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
358
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
359 if (current >= 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
360 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
361 if (current > 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
362 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
363 file_image_change_to(current - 1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
364 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
365 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
366 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
367 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
368 file_image_change_to(file_count() - 1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
369 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
370 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
371
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
372 void file_first_image()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
373 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
374 gint current = find_file_in_list(image_get_path());
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
375 if (current != 0 && file_count() > 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
376 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
377 file_image_change_to(0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
378 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
379 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
380
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
381 void file_last_image()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
382 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
383 gint current = find_file_in_list(image_get_path());
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
384 gint count = file_count();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
385 if (current != count - 1 && count > 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
386 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
387 file_image_change_to(count - 1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
388 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
389 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
390
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
391 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
392 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
393 * file delete/rename update routines
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
394 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
395 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
396
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
397 static gint file_find_closest_unaccounted(gint row, gint count, GList *ignore_list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
398 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
399 GList *list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
400 GList *work;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
401 gint rev = row - 1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
402 row ++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
403
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
404 work = ignore_list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
405 while(work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
406 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
407 gint f = find_file_in_list(work->data);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
408 if (f >= 0) list = g_list_append(list, GINT_TO_POINTER(f));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
409 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
410 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
411
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
412 while(list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
413 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
414 gint c = TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
415 work = list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
416 while(work && c)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
417 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
418 gpointer p = work->data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
419 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
420 if (row == GPOINTER_TO_INT(p))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
421 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
422 row++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
423 c = FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
424 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
425 if (rev == GPOINTER_TO_INT(p))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
426 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
427 rev--;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
428 c = FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
429 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
430 if (!c) list = g_list_remove(list, p);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
431 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
432 if (c && list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
433 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
434 g_list_free(list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
435 list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
436 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
437 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
438 if (row > count - 1)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
439 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
440 if (rev < 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
441 return -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
442 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
443 return rev;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
444 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
445 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
446 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
447 return row;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
448 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
449 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
450
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
451 void file_is_gone(gchar *path, GList *ignore_list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
452 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
453 GList *list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
454 gchar *name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
455 gint row;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
456 gint new_row = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
457 row = find_file_in_list(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
458 if (row < 0) return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
459
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
460 if (file_is_selected(row) /* && file_selection_count() == 1 */)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
461 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
462 gint n = file_count();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
463 if (ignore_list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
464 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
465 new_row = file_find_closest_unaccounted(row, n, ignore_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
466 if (debug) printf("row = %d, closest is %d\n", row, new_row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
467 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
468 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
469 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
470 if (row + 1 < n)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
471 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
472 new_row = row + 1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
473 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
474 else if (row > 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
475 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
476 new_row = row - 1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
477 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
478 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
479 gtk_clist_unselect_all(GTK_CLIST(file_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
480 if (new_row >= 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
481 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
482 gtk_clist_select_row(GTK_CLIST(file_clist), new_row, -1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
483 file_image_change_to(new_row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
484 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
485 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
486 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
487 image_change_to(NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
488 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
489 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
490
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
491 gtk_clist_remove(GTK_CLIST(file_clist), row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
492 list = g_list_nth(file_list, row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
493 name = list->data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
494 file_list = g_list_remove(file_list, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
495 g_free(name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
496 update_status_label(NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
497 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
498
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
499 void file_is_renamed(gchar *source, gchar *dest)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
500 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
501 gint row;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
502 gchar *source_base;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
503 gchar *dest_base;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
504
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
505 if (image_get_path() && !strcmp(source, image_get_path()))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
506 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
507 image_set_path(dest);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
508 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
509
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
510 row = find_file_in_list(source);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
511 if (row < 0) return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
512
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
513 source_base = remove_level_from_path(source);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
514 dest_base = remove_level_from_path(dest);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
515
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
516 if (strcmp(source_base, dest_base) == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
517 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
518 gchar *name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
519 gint n;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
520 GList *work = g_list_nth(file_list, row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
521 name = work->data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
522 file_list = g_list_remove(file_list, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
523 g_free(name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
524 name = g_strdup(filename_from_path(dest));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
525 file_list = g_list_insert_sorted(file_list, name, (GCompareFunc) sort_list_cb);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
526 n = g_list_index(file_list, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
527
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
528 if (gtk_clist_get_cell_type(GTK_CLIST(file_clist), row, 0) != GTK_CELL_PIXTEXT)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
529 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
530 gtk_clist_set_text (GTK_CLIST(file_clist), row, 0, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
531 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
532 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
533 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
534 guint8 spacing = 0;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
535 GdkPixmap *pixmap = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
536 GdkBitmap *mask = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
537 gtk_clist_get_pixtext(GTK_CLIST(file_clist), row, 0,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
538 NULL, &spacing, &pixmap, &mask);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
539 gtk_clist_set_pixtext(GTK_CLIST(file_clist), row, 0,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
540 name, spacing, pixmap, mask);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
541 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
542
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
543 gtk_clist_set_row_data(GTK_CLIST(file_clist), row, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
544 gtk_clist_row_move(GTK_CLIST(file_clist), row, n);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
545 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
546 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
547 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
548 GList *work = g_list_nth(file_list, row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
549 gchar *name = work->data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
550 file_list = g_list_remove(file_list, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
551 gtk_clist_remove(GTK_CLIST(file_clist), row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
552 g_free(name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
553 update_status_label(NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
554 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
555
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
556 g_free(source_base);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
557 g_free(dest_base);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
558
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
559 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
560
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
561 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
562 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
563 * directory list callbacks
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
564 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
565 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
566
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
567 void dir_select_cb(GtkWidget *widget, gint row, gint col,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
568 GdkEvent *event, gpointer data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
569 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
570 gchar *name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
571 gchar *new_path;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
572 name = gtk_clist_get_row_data (GTK_CLIST(dir_clist), row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
573 if (strcmp(name, ".") == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
574 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
575 new_path = g_strdup(current_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
576 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
577 else if (strcmp(name, "..") == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
578 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
579 new_path = remove_level_from_path(current_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
580 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
581 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
582 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
583 if (strcmp(current_path, "/") == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
584 new_path = g_strconcat(current_path, name, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
585 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
586 new_path = g_strconcat(current_path, "/", name, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
587 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
588 filelist_change_to(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
589 g_free(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
590 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
591
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
592 void dir_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
593 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
594 gint row = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
595 gint col = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
596
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
597 gtk_clist_get_selection_info (GTK_CLIST (widget), bevent->x, bevent->y, &row, &col);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
598
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
599 if (bevent->button == 2)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
600 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
601 gtk_object_set_user_data(GTK_OBJECT(dir_clist), GINT_TO_POINTER(row));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
602 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
603 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
604
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
605 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
606 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
607 * file list callbacks
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
608 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
609 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
610
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
611 void file_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
612 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
613 gint row = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
614 gint col = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
615
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
616 gtk_clist_get_selection_info (GTK_CLIST (widget), bevent->x, bevent->y, &row, &col);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
617 if (row == -1 || col == -1)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
618 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
619 filelist_click_row = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
620 return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
621 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
622
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
623 filelist_click_row = row;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
624
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
625 if (bevent->button == 3)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
626 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
627 file_clist_highlight_set();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
628 gtk_menu_popup (GTK_MENU(menu_file_popup), NULL, NULL, NULL, NULL,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
629 bevent->button, bevent->time);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
630 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
631 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
632
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
633 void file_select_cb(GtkWidget *widget, gint row, gint col,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
634 GdkEvent *event, gpointer data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
635 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
636 gchar *name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
637 gchar *path;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
638
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
639 if (file_selection_count() != 1)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
640 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
641 update_status_label(NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
642 return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
643 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
644
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
645 name = gtk_clist_get_row_data(GTK_CLIST(file_clist), row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
646 path = g_strconcat(current_path, "/", name, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
647 image_change_to(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
648 update_status_label(NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
649 g_free(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
650 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
651
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
652 void file_unselect_cb(GtkWidget *widget, gint row, gint col,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
653 GdkEvent *event, gpointer data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
654 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
655 #if 0
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
656 gchar *name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
657 gchar *path;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
658
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
659 name = gtk_clist_get_row_data(GTK_CLIST(file_clist), row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
660 path = g_strconcat(current_path, "/", name, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
661
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
662 if (strcmp(path, image_get_path()) == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
663 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
664 if (file_selection_count() > 0 && !file_is_selected(find_file_in_list(image_get_path())) )
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
665 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
666 gint new_row = GPOINTER_TO_INT(GTK_CLIST(file_clist)->selection->data);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
667 gchar *new_name = gtk_clist_get_row_data(GTK_CLIST(file_clist), new_row);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
668 gchar *new_path = g_strconcat(current_path, "/", new_name, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
669 image_change_to(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
670 g_free(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
671 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
672 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
673 g_free(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
674 #endif
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
675 update_status_label(NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
676 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
677
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
678 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
679 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
680 * file list highlight utils
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
681 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
682 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
683
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
684 void file_clist_highlight_set()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
685 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
686 if (file_clicked_is_selected()) return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
687
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
688 gtk_clist_set_background(GTK_CLIST(file_clist), filelist_click_row,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
689 &GTK_WIDGET (file_clist)->style->bg[GTK_STATE_PRELIGHT]);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
690 gtk_clist_set_foreground(GTK_CLIST(file_clist), filelist_click_row,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
691 &GTK_WIDGET (file_clist)->style->fg[GTK_STATE_PRELIGHT]);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
692 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
693
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
694 void file_clist_highlight_unset()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
695 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
696 if (file_clicked_is_selected()) return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
697
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
698 gtk_clist_set_background(GTK_CLIST(file_clist), filelist_click_row, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
699 gtk_clist_set_foreground(GTK_CLIST(file_clist), filelist_click_row, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
700 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
701
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
702 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
703 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
704 * path entry and history menu
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
705 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
706 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
707
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
708 void path_entry_cb(gchar *newdir, gpointer data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
709 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
710 gchar *new_path = g_strdup(newdir);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
711 parse_out_relatives(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
712 if (isdir(new_path))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
713 filelist_change_to(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
714 else if (isfile(new_path))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
715 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
716 gchar *path = remove_level_from_path(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
717 filelist_change_to(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
718 g_free(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
719 image_change_to(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
720 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
721 g_free(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
722 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
723
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
724 static void history_menu_select_cb(GtkWidget *widget, gpointer data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
725 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
726 gchar *new_path = data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
727 filelist_change_to(new_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
728 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
729
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
730 static gchar *truncate_hist_text(gchar *t, gint l)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
731 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
732 gchar *tp;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
733 gchar *tbuf;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
734 if (l >= strlen(t)) return g_strdup(t);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
735 tp = t + strlen(t) - l;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
736 while (tp[0] != '/' && tp < t + strlen(t)) tp++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
737 /* this checks to see if directory name is longer than l, if so
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
738 * reset the length of name to l, it's better to have a partial
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
739 * name than no name at all.
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
740 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
741 if (tp >= t + strlen(t)) tp = t + strlen(t) - l;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
742 tbuf = g_strconcat("/...", tp, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
743 return tbuf;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
744 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
745
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
746 static void filelist_set_history(gchar *path)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
747 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
748 static GList *history_list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
749 gchar *buf;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
750 gchar *buf_ptr;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
751 GtkWidget *menu;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
752 GtkWidget *item;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
753
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
754 if (!path) return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
755
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
756 gtk_entry_set_text(GTK_ENTRY(path_entry), current_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
757
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
758 if (history_list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
759 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
760 g_list_foreach(history_list, (GFunc)g_free, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
761 g_list_free(history_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
762 history_list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
763 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
764
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
765 menu = gtk_menu_new();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
766
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
767 buf = g_strdup(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
768 buf_ptr = buf + strlen(buf) - 1 ;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
769 while (buf_ptr > buf)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
770 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
771 gchar *full_path;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
772 gchar *truncated;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
773 truncated = truncate_hist_text(buf, 32);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
774
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
775 full_path = g_strdup(buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
776 history_list = g_list_append(history_list, full_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
777
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
778 item = gtk_menu_item_new_with_label (truncated);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
779 gtk_signal_connect (GTK_OBJECT (item), "activate",
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
780 (GtkSignalFunc) history_menu_select_cb, full_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
781
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
782 gtk_menu_append (GTK_MENU (menu), item);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
783 gtk_widget_show (item);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
784
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
785 g_free(truncated);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
786
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
787 while (buf_ptr[0] != '/' && buf_ptr > buf) buf_ptr--;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
788 buf_ptr[0] = '\0';
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
789 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
790 g_free(buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
791
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
792 item = gtk_menu_item_new_with_label ("/");
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
793
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
794 gtk_signal_connect (GTK_OBJECT (item), "activate",
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
795 (GtkSignalFunc) history_menu_select_cb, "/");
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
796
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
797 gtk_menu_append (GTK_MENU (menu), item);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
798 gtk_widget_show (item);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
799
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
800 gtk_option_menu_set_menu(GTK_OPTION_MENU(history_menu), menu);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
801 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
802
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
803 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
804 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
805 * list update routines (public)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
806 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
807 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
808
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
809 static gint thumbs_running = 0;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
810
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
811 void interrupt_thumbs()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
812 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
813 if (thumbs_running > 0) thumbs_running ++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
814 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
815
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
816 void filelist_populate_clist()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
817 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
818 GList *work;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
819 gint width;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
820 gint tmp_width;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
821 gint row;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
822 gchar *image_name = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
823 gchar *buf;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
824
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
825 gint row_p = 0;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
826 gchar *text;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
827 guint8 spacing;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
828 GdkPixmap *nopixmap;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
829 GdkBitmap *nomask;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
830
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
831 interrupt_thumbs();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
832
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
833 filelist_set_history(current_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
834
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
835 gtk_clist_freeze (GTK_CLIST (dir_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
836 gtk_clist_clear (GTK_CLIST (dir_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
837
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
838 width = 0;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
839 work = dir_list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
840 while(work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
841 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
842 gchar *buf[2];
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
843 buf[0] = work->data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
844 buf[1] = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
845 row = gtk_clist_append(GTK_CLIST(dir_clist), buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
846 gtk_clist_set_row_data (GTK_CLIST(dir_clist), row, work->data);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
847 tmp_width = gdk_string_width(dir_clist->style->font, buf[0]);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
848 if (tmp_width > width) width = tmp_width;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
849 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
850 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
851
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
852 gtk_clist_set_column_width(GTK_CLIST(dir_clist), 0, width);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
853 gtk_clist_thaw(GTK_CLIST (dir_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
854
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
855 buf = remove_level_from_path(image_get_path());
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
856 if (buf && strcmp(buf, current_path) == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
857 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
858 image_name = image_get_name();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
859 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
860 g_free(buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
861
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
862 gtk_clist_freeze (GTK_CLIST (file_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
863
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
864 if (!thumbnails_enabled)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
865 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
866 gtk_clist_set_row_height (GTK_CLIST(file_clist),
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
867 GTK_WIDGET(file_clist)->style->font->ascent +
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
868 GTK_WIDGET(file_clist)->style->font->descent + 1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
869 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
870 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
871 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
872 gtk_clist_set_row_height (GTK_CLIST(file_clist), thumb_max_height + 2);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
873 maintain_thumbnail_dir(current_path, FALSE);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
874 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
875
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
876 width = 0;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
877 work = file_list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
878
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
879 while(work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
880 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
881 gint has_pixmap;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
882 gint match;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
883 gchar *name = work->data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
884 gint done = FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
885
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
886 while (!done)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
887 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
888 if (GTK_CLIST(file_clist)->rows > row_p)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
889 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
890 if (gtk_clist_get_cell_type(GTK_CLIST(file_clist),row_p, 0) == GTK_CELL_PIXTEXT)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
891 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
892 gtk_clist_get_pixtext(GTK_CLIST(file_clist), row_p, 0, &text, &spacing, &nopixmap, &nomask);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
893 has_pixmap = TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
894 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
895 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
896 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
897 gtk_clist_get_text(GTK_CLIST(file_clist), row_p, 0, &text);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
898 has_pixmap = FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
899 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
900 match = strcmp(name, text);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
901 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
902 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
903 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
904 match = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
905 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
906
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
907 if (match < 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
908 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
909 gchar *buf[2];
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
910 buf[0] = name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
911 buf[1] = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
912 row = gtk_clist_insert(GTK_CLIST(file_clist), row_p, buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
913 gtk_clist_set_row_data (GTK_CLIST(file_clist), row, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
914 if (thumbnails_enabled)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
915 gtk_clist_set_shift(GTK_CLIST(file_clist), row, 0, 0, 5 + thumb_max_width);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
916 done = TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
917 if (image_name && strcmp(name, image_name) == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
918 gtk_clist_select_row(GTK_CLIST(file_clist), row, 0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
919 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
920 else if (match > 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
921 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
922 gtk_clist_remove(GTK_CLIST(file_clist), row_p);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
923 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
924 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
925 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
926 if (thumbnails_enabled && !has_pixmap)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
927 gtk_clist_set_shift(GTK_CLIST(file_clist), row_p, 0, 0, 5 + thumb_max_width);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
928 if (!thumbnails_enabled/* && has_pixmap*/)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
929 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
930 gtk_clist_set_text(GTK_CLIST(file_clist), row_p, 0, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
931 gtk_clist_set_shift(GTK_CLIST(file_clist), row_p, 0, 0, 0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
932 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
933 gtk_clist_set_row_data (GTK_CLIST(file_clist), row_p, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
934 done = TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
935 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
936 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
937 row_p++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
938
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
939 if (thumbnails_enabled)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
940 tmp_width = gdk_string_width(file_clist->style->font, name) + thumb_max_width + 5;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
941 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
942 tmp_width = gdk_string_width(file_clist->style->font, name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
943 if (tmp_width > width) width = tmp_width;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
944 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
945 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
946
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
947 while (GTK_CLIST(file_clist)->rows > row_p)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
948 gtk_clist_remove(GTK_CLIST(file_clist), row_p);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
949
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
950 gtk_clist_set_column_width(GTK_CLIST(file_clist), 0, width);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
951 gtk_clist_thaw(GTK_CLIST (file_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
952
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
953 if (thumbnails_enabled)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
954 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
955 GList *done_list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
956 gint past_run;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
957 gint finished = FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
958 gint j;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
959 gint count = 0;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
960 update_status_label(_("Loading thumbs..."));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
961
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
962 for (j = 0; j < GTK_CLIST(file_clist)->rows; j++)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
963 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
964 done_list = g_list_prepend(done_list, GINT_TO_POINTER(FALSE));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
965 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
966
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
967 /* load thumbs */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
968
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
969 while (!finished && done_list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
970 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
971 gint p = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
972 gint r = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
973 gint c = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
974 gtk_clist_get_selection_info (GTK_CLIST(file_clist), 1, 1, &r, &c);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
975 if (r != -1)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
976 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
977 work = g_list_nth(done_list, r);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
978 while (work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
979 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
980 if (gtk_clist_row_is_visible(GTK_CLIST(file_clist), r))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
981 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
982 if (!GPOINTER_TO_INT(work->data))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
983 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
984 work->data = GINT_TO_POINTER(TRUE);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
985 p = r;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
986 work = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
987 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
988 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
989 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
990 r++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
991 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
992 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
993 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
994 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
995 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
996 work = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
997 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
998 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
999 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1000 if (p == -1)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1001 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1002 work = done_list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1003 r = 0;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1004 while(work && p == -1)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1005 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1006 if (!GPOINTER_TO_INT(work->data))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1007 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1008 p = r;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1009 work->data = GINT_TO_POINTER(TRUE);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1010 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1011 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1012 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1013 r++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1014 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1015 if (!work) finished = TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1016 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1017 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1018 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1019
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1020 count++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1021
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1022 if (!finished && gtk_clist_get_cell_type(GTK_CLIST(file_clist), p, 0) != GTK_CELL_PIXTEXT)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1023 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1024 GdkPixmap *pixmap = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1025 GdkBitmap *mask = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1026 gchar *name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1027 gchar *path;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1028
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1029 thumbs_running ++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1030 past_run = thumbs_running;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1031 while(gtk_events_pending()) gtk_main_iteration();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1032 if (thumbs_running > past_run)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1033 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1034 thumbs_running -= 2;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1035 update_progressbar(0.0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1036 update_status_label(NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1037 g_list_free(done_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1038 return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1039 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1040 thumbs_running --;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1041
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1042 name = gtk_clist_get_row_data(GTK_CLIST(file_clist), p);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1043 path = g_strconcat (current_path, "/", name, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1044 spacing = create_thumbnail(path, &pixmap, &mask);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1045 g_free(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1046 gtk_clist_set_pixtext (GTK_CLIST(file_clist), p, 0, name, spacing + 5, pixmap, mask);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1047 gtk_clist_set_shift(GTK_CLIST(file_clist), p, 0, 0, 0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1048
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1049 update_progressbar((gfloat)(count) / GTK_CLIST(file_clist)->rows);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1050 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1051 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1052 update_progressbar(0.0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1053 g_list_free(done_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1054 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1055
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1056 update_status_label(NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1057 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1058
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1059 void filelist_refresh()
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1060 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1061 filelist_read(current_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1062 filelist_populate_clist();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1063 filelist_click_row = -1;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1064 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1065
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1066 void filelist_change_to(gchar *path)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1067 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1068 if (!isdir(path)) return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1069
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1070 g_free(current_path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1071 current_path = g_strdup(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1072
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1073 filelist_refresh();
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1074 }