annotate src/collect.c @ 276:4f526d436873

Implement secure rc file saving. First data is written to a temporary file, then if nothing was wrong, this file is renamed to the final name. This way the risk of corrupted rc file is greatly reduced. The code is borrowed from ELinks (http://elinks.cz).
author zas_
date Tue, 08 Apr 2008 21:55:58 +0000
parents fa7d69e7d02d
children 9995c5fb202a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1 /*
196
f6e307c7bad6 rename GQview -> Geeqie over the code
nadvornik
parents: 138
diff changeset
2 * Geeqie
94
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
3 * (C) 2006 John Ellis
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
4 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
5 * Author: John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
6 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
7 * This software is released under the GNU General Public License (GNU GPL).
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
8 * Please read the included file COPYING for more information.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
9 * This software comes with no warranty of any kind, use at your own risk!
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
10 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
11
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
12
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
13 #include "gqview.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
14 #include "collect.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
15
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
16 #include "collect-dlg.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
17 #include "collect-io.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
18 #include "collect-table.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
19 #include "editors.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
20 #include "filelist.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
21 #include "img-view.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
22 #include "info.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
23 #include "layout.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
24 #include "layout_image.h"
91
d063f97503b7 Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents: 85
diff changeset
25 #include "pixbuf_util.h"
94
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
26 #include "print.h"
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
27 #include "utilops.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
28 #include "ui_fileops.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
29 #include "ui_tree_edit.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
30
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
31 #include <gdk/gdkkeysyms.h> /* for keyboard values */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
32
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
33
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
34 #define COLLECT_DEF_WIDTH 440
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
35 #define COLLECT_DEF_HEIGHT 450
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
36
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
37 static GList *collection_list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
38 static GList *collection_window_list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
39
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
40 static void collection_window_get_geometry(CollectWindow *cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
41 static void collection_window_refresh(CollectWindow *cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
42 static void collection_window_update_title(CollectWindow *cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
43 static void collection_window_add(CollectWindow *cw, CollectInfo *ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
44 static void collection_window_insert(CollectWindow *cw, CollectInfo *ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
45 static void collection_window_remove(CollectWindow *cw, CollectInfo *ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
46 static void collection_window_update(CollectWindow *cw, CollectInfo *ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
47
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
48 static void collection_window_close(CollectWindow *cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
49
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
50 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
51 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
52 * data, list handling
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
53 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
54 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
55
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
56 CollectInfo *collection_info_new(FileData *fd, struct stat *st, GdkPixbuf *pixbuf)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
57 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
58 CollectInfo *ci;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
59
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
60 if (!fd) return NULL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
61
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
62 ci = g_new0(CollectInfo, 1);
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
63 ci->fd = file_data_ref(fd);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
64
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
65 ci->pixbuf = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
66 if (ci->pixbuf) g_object_ref(ci->pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
67
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
68 return ci;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
69 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
70
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
71 void collection_info_free_thumb(CollectInfo *ci)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
72 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
73 if (ci->pixbuf) g_object_unref(ci->pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
74 ci->pixbuf = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
75 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
76
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
77 void collection_info_free(CollectInfo *ci)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
78 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
79 if (!ci) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
80
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
81 file_data_unref(ci->fd);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
82 collection_info_free_thumb(ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
83 g_free(ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
84 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
85
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
86 void collection_info_set_thumb(CollectInfo *ci, GdkPixbuf *pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
87 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
88 if (pixbuf) g_object_ref(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
89 collection_info_free_thumb(ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
90 ci->pixbuf = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
91 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
92
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
93 gint collection_info_load_thumb(CollectInfo *ci)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
94 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
95 if (!ci) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
96
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
97 collection_info_free_thumb(ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
98
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
99 printf("collection_info_load_thumb not implemented!\n(because an instant thumb loader not implemented)");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
100 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
101 #if 0
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
102 if (create_thumbnail(ci->fd->path, &ci->pixmap, &ci->mask) < 0) return FALSE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
103
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
104 if (ci->pixmap) gdk_pixmap_ref(ci->pixmap);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
105 if (ci->mask) gdk_bitmap_ref(ci->mask);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
106
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
107 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
108 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
109 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
110
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
111 void collection_list_free(GList *list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
112 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
113 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
114 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
115 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
116 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
117 collection_info_free((CollectInfo *)work->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
118 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
119 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
120 g_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
121 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
122
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
123 /* an ugly static var, well what ya gonna do ? */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
124 static SortType collection_list_sort_method = SORT_NAME;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
125
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
126 static gint collection_list_sort_cb(gconstpointer a, gconstpointer b)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
127 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
128 const CollectInfo *cia = a;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
129 const CollectInfo *cib = b;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
130
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
131 switch(collection_list_sort_method)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
132 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
133 case SORT_NONE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
134 return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
135 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
136 case SORT_SIZE:
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
137 if (cia->fd->size < cib->fd->size) return -1;
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
138 if (cia->fd->size > cib->fd->size) return 1;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
139 return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
140 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
141 case SORT_TIME:
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
142 if (cia->fd->date < cib->fd->date) return -1;
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
143 if (cia->fd->date > cib->fd->date) return 1;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
144 return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
145 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
146 case SORT_PATH:
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
147 return CASE_SORT(cia->fd->path, cib->fd->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
148 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
149 #ifdef HAVE_STRVERSCMP
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
150 case SORT_NUMBER:
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
151 return strverscmp(cia->fd->name, cib->fd->name);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
152 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
153 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
154 case SORT_NAME:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
155 default:
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
156 return CASE_SORT(cia->fd->name, cib->fd->name);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
157 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
158 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
159
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
160 return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
161 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
162
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
163 GList *collection_list_sort(GList *list, SortType method)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
164 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
165 if (method == SORT_NONE) return list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
166
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
167 collection_list_sort_method = method;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
168
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
169 return g_list_sort(list, collection_list_sort_cb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
170 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
171
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
172 GList *collection_list_add(GList *list, CollectInfo *ci, SortType method)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
173 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
174 if (method != SORT_NONE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
175 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
176 collection_list_sort_method = method;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
177 list = g_list_insert_sorted(list, ci, collection_list_sort_cb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
178 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
179 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
180 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
181 list = g_list_append(list, ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
182 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
183
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
184 return list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
185 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
186
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
187 GList *collection_list_insert(GList *list, CollectInfo *ci, CollectInfo *insert_ci, SortType method)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
188 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
189 if (method != SORT_NONE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
190 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
191 collection_list_sort_method = method;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
192 list = g_list_insert_sorted(list, ci, collection_list_sort_cb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
193 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
194 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
195 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
196 GList *point;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
197
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
198 point = g_list_find(list, insert_ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
199 list = uig_list_insert_link(list, point, ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
200 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
201
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
202 return list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
203 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
204
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
205 GList *collection_list_remove(GList *list, CollectInfo *ci)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
206 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
207 list = g_list_remove(list, ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
208 collection_info_free(ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
209 return list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
210 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
211
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
212 CollectInfo *collection_list_find(GList *list, const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
213 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
214 GList *work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
215
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
216 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
217 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
218 CollectInfo *ci = work->data;
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
219 if (strcmp(ci->fd->path, path) == 0) return ci;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
220 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
221 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
222
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
223 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
224 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
225
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
226 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
227 static GList *collection_list_find_link(GList *list, gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
228 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
229 GList *work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
230
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
231 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
232 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
233 CollectInfo *ci = work->data;
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
234 if (strcmp(ci->fd->path, path) == 0) return work;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
235 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
236 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
237
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
238 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
239 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
240
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
241 static gint collection_list_find_index(GList *list, gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
242 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
243 gint c = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
244 GList *work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
245
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
246 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
247 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
248 CollectInfo *ci = work->data;
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
249 if (strcmp(ci->fd->path, path) == 0) return c;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
250 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
251 c++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
252 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
253
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
254 return -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
255 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
256 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
257
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
258 GList *collection_list_to_filelist(GList *list)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
259 {
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
260 GList *filelist = NULL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
261 GList *work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
262
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
263 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
264 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
265 CollectInfo *info = work->data;
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
266 filelist = g_list_prepend(filelist, file_data_ref(info->fd));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
267 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
268 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
269
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
270 filelist = g_list_reverse(filelist);
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
271 return filelist;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
272 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
273
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
274 CollectWindow *collection_window_find(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
275 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
276 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
277
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
278 work = collection_window_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
279 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
280 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
281 CollectWindow *cw = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
282 if (cw->cd == cd) return cw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
283 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
284 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
285
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
286 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
287 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
288
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
289 CollectWindow *collection_window_find_by_path(const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
290 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
291 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
292
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
293 if (!path) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
294
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
295 work = collection_window_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
296 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
297 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
298 CollectWindow *cw = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
299 if (cw->cd->path && strcmp(cw->cd->path, path) == 0) return cw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
300 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
301 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
302
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
303 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
304 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
305
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
306 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
307 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
308 * please use these to actually add/remove stuff
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
309 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
310 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
311
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
312 CollectionData *collection_new(const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
313 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
314 CollectionData *cd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
315 static gint untitled_counter = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
316
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
317 cd = g_new0(CollectionData, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
318
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
319 collection_list = g_list_append(collection_list, cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
320
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
321 cd->ref = 1; /* starts with a ref of 1 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
322
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
323 cd->list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
324 cd->sort_method = SORT_NONE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
325 cd->thumb_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
326 cd->info_updated_func = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
327
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
328 cd->window_read = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
329 cd->window_x = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
330 cd->window_y = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
331 cd->window_w = COLLECT_DEF_WIDTH;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
332 cd->window_h = COLLECT_DEF_HEIGHT;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
333
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
334 cd->changed = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
335
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
336 if (path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
337 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
338 cd->path = g_strdup(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
339 cd->name = g_strdup(filename_from_path(cd->path));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
340 /* load it */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
341 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
342 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
343 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
344 cd->path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
345
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
346 if (untitled_counter == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
347 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
348 cd->name = g_strdup(_("Untitled"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
349 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
350 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
351 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
352 cd->name = g_strdup_printf(_("Untitled (%d)"), untitled_counter + 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
353 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
354
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
355 untitled_counter++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
356 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
357
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
358 return cd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
359 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
360
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
361 void collection_free(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
362 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
363 if (!cd) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
364
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
365 if (debug) printf("collection \"%s\" freed\n", cd->name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
366
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
367 collection_load_stop(cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
368 collection_list_free(cd->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
369
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
370 collection_list = g_list_remove(collection_list, cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
371
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
372 g_free(cd->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
373 g_free(cd->name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
374
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
375 g_free(cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
376 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
377
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
378 void collection_ref(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
379 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
380 cd->ref++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
381
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
382 if (debug) printf("collection \"%s\" ref count = %d\n", cd->name, cd->ref);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
383 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
384
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
385 void collection_unref(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
386 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
387 cd->ref--;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
388
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
389 if (debug) printf("collection \"%s\" ref count = %d\n", cd->name, cd->ref);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
390
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
391 if (cd->ref < 1)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
392 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
393 collection_free(cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
394 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
395 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
396
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
397 void collection_path_changed(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
398 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
399 collection_window_update_title(collection_window_find(cd));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
400 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
401
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
402 gint collection_to_number(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
403 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
404 return g_list_index(collection_list, cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
405 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
406
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
407 CollectionData *collection_from_number(gint n)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
408 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
409 return g_list_nth_data(collection_list, n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
410 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
411
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
412 CollectionData *collection_from_dnd_data(const gchar *data, GList **list, GList **info_list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
413 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
414 CollectionData *cd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
415 gint n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
416
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
417 if (strncmp(data, "COLLECTION:", 11) != 0) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
418
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
419 n = (gint)strtol(data + 11, NULL, 10);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
420 cd = collection_from_number(n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
421
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
422 if (!cd || (!list && !info_list))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
423 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
424 return cd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
425 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
426 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
427 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
428 GList *work = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
429 GList *infol = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
430 gint b, e;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
431
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
432 b = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
433 while(data[b] != '\0' && data[b] != '\n' ) b++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
434 b++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
435 e = b;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
436
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
437 while (data[b] != '\0')
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
438 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
439 CollectInfo *info;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
440
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
441 while (data[e] != '\n' && data[e] != '\0') e++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
442 n = (gint)strtol(data + b, NULL, 10);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
443
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
444 info = g_list_nth_data(cd->list, n);
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
445 if (info && list) work = g_list_append(work, file_data_ref(info->fd));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
446 if (info && info_list) infol = g_list_append(infol, info);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
447
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
448 while (data[e] == '\n') e++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
449 b = e;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
450 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
451 if (list) *list = work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
452 if (info_list) *info_list = infol;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
453 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
454
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
455 return cd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
456 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
457
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
458 gchar *collection_info_list_to_dnd_data(CollectionData *cd, GList *list, gint *length)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
459 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
460 gchar *uri_text = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
461 gint total;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
462 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
463 gint n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
464 GList *temp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
465 gchar *ptr;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
466
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
467 n = collection_to_number(cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
468
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
469 if (!list || n < 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
470 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
471 *length = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
472 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
473 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
474
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
475 temp = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
476 temp = g_list_prepend(temp, g_strdup_printf("COLLECTION:%d\n", n));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
477 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
478 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
479 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
480 n = g_list_index(cd->list, work->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
481 if (n >= 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
482 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
483 temp = g_list_prepend(temp, g_strdup_printf("%d\n", n));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
484 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
485 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
486 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
487
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
488 total = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
489 work = temp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
490 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
491 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
492 total += strlen((gchar *)work->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
493 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
494 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
495 total += 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
496
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
497 uri_text = g_malloc(total);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
498 ptr = uri_text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
499
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
500 work = g_list_last(temp);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
501 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
502 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
503 gchar *text = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
504
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
505 work = work->prev;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
506
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
507 strcpy(ptr, text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
508 ptr += strlen(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
509 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
510
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
511 ptr[0] = '\0';
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
512
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
513 string_list_free(temp);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
514
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
515 *length = total;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
516
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
517 return uri_text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
518 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
519
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
520 gint collection_info_valid(CollectionData *cd, CollectInfo *info)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
521 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
522 if (collection_to_number(cd) < 0) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
523
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
524 return (g_list_index(cd->list, info) != 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
525 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
526
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
527 CollectInfo *collection_next_by_info(CollectionData *cd, CollectInfo *info)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
528 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
529 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
530
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
531 work = g_list_find(cd->list, info);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
532
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
533 if (!work) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
534 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
535 if (work) return work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
536 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
537 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
538
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
539 CollectInfo *collection_prev_by_info(CollectionData *cd, CollectInfo *info)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
540 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
541 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
542
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
543 work = g_list_find(cd->list, info);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
544
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
545 if (!work) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
546 work = work->prev;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
547 if (work) return work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
548 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
549 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
550
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
551 CollectInfo *collection_get_first(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
552 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
553 if (cd->list) return cd->list->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
554
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
555 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
556 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
557
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
558 CollectInfo *collection_get_last(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
559 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
560 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
561
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
562 list = g_list_last(cd->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
563
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
564 if (list) return list->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
565
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
566 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
567 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
568
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
569 void collection_set_sort_method(CollectionData *cd, SortType method)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
570 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
571 if (!cd) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
572
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
573 if (cd->sort_method == method) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
574
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
575 cd->sort_method = method;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
576 cd->list = collection_list_sort(cd->list, cd->sort_method);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
577 if (cd->list) cd->changed = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
578
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
579 collection_window_refresh(collection_window_find(cd));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
580 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
581
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
582 void collection_set_update_info_func(CollectionData *cd,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
583 void (*func)(CollectionData *, CollectInfo *, gpointer), gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
584 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
585 cd->info_updated_func = func;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
586 cd->info_updated_data = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
587 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
588
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
589 gint collection_add_check(CollectionData *cd, FileData *fd, gint sorted, gint must_exist)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
590 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
591 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
592 gint valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
593
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
594 if (must_exist)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
595 {
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
596 valid = (stat_utf8(fd->path, &st) && !S_ISDIR(st.st_mode));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
597 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
598 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
599 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
600 valid = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
601 st.st_size = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
602 st.st_mtime = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
603 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
604
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
605 if (valid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
606 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
607 CollectInfo *ci;
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
608 ci = collection_info_new(fd, &st, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
609 cd->list = collection_list_add(cd->list, ci, sorted ? cd->sort_method : SORT_NONE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
610 cd->changed = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
611
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
612 if (!sorted || cd->sort_method == SORT_NONE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
613 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
614 collection_window_add(collection_window_find(cd), ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
615 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
616 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
617 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
618 collection_window_insert(collection_window_find(cd), ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
619 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
620 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
621
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
622 return valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
623 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
624
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
625 gint collection_add(CollectionData *cd, FileData *fd, gint sorted)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
626 {
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
627 return collection_add_check(cd, fd, sorted, TRUE);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
628 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
629
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
630 gint collection_insert(CollectionData *cd, FileData *fd, CollectInfo *insert_ci, gint sorted)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
631 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
632 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
633
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
634 if (!insert_ci) return collection_add(cd, fd, sorted);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
635
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
636 if (stat_utf8(fd->path, &st) >= 0 && !S_ISDIR(st.st_mode))
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
637 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
638 CollectInfo *ci;
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
639 ci = collection_info_new(fd, &st, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
640 cd->list = collection_list_insert(cd->list, ci, insert_ci, sorted ? cd->sort_method : SORT_NONE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
641 cd->changed = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
642
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
643 collection_window_insert(collection_window_find(cd), ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
644
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
645 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
646 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
647
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
648 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
649 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
650
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
651 gint collection_remove(CollectionData *cd, FileData *fd)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
652 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
653 CollectInfo *ci;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
654
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
655 ci = collection_list_find(cd->list, fd->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
656
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
657 if (!ci) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
658
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
659 cd->list = g_list_remove(cd->list, ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
660 cd->changed = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
661
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
662 collection_window_remove(collection_window_find(cd), ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
663 collection_info_free(ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
664
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
665 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
666 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
667
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
668 static void collection_remove_by_info(CollectionData *cd, CollectInfo *info)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
669 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
670 if (!info || !g_list_find(cd->list, info)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
671
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
672 cd->list = g_list_remove(cd->list, info);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
673 cd->changed = (cd->list != NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
674
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
675 collection_window_remove(collection_window_find(cd), info);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
676 collection_info_free(info);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
677 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
678
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
679 void collection_remove_by_info_list(CollectionData *cd, GList *list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
680 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
681 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
682
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
683 if (!list) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
684
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
685 if (!list->next)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
686 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
687 /* more efficient (in collect-table) to remove a single item this way */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
688 collection_remove_by_info(cd, (CollectInfo *)list->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
689 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
690 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
691
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
692 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
693 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
694 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
695 cd->list = collection_list_remove(cd->list, work->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
696 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
697 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
698 cd->changed = (cd->list != NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
699
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
700 collection_window_refresh(collection_window_find(cd));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
701 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
702
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
703 gint collection_rename(CollectionData *cd, FileData *fd)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
704 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
705 CollectInfo *ci;
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
706 const gchar *source = fd->change->source;
259
fa7d69e7d02d Comment out unused code.
zas_
parents: 254
diff changeset
707 // const gchar *dest = fd->change->dest;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
708 ci = collection_list_find(cd->list, source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
709
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
710 if (!ci) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
711
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
712 // g_free(ci->path);
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
713 // ci->path = g_strdup(dest); FIXME
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
714 cd->changed = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
715
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
716 collection_window_update(collection_window_find(cd), ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
717
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
718 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
719 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
720
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
721 void collection_update_geometry(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
722 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
723 collection_window_get_geometry(collection_window_find(cd));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
724 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
725
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
726 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
727 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
728 * simple maintenance for renaming, deleting
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
729 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
730 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
731
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
732 void collection_maint_removed(FileData *fd)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
733 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
734 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
735
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
736 work = collection_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
737 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
738 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
739 CollectionData *cd = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
740 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
741
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
742 while(collection_remove(cd, fd));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
743 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
744 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
745 /* Do we really need to do this? removed files are
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
746 * automatically ignored when loading a collection.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
747 */
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
748 collect_manager_moved(fd, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
749 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
750 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
751
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
752 void collection_maint_renamed(FileData *fd)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
753 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
754 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
755
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
756 work = collection_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
757 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
758 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
759 CollectionData *cd = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
760 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
761
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
762 while(collection_rename(cd, fd));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
763 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
764
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
765 collect_manager_moved(fd);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
766 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
767
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
768 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
769 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
770 * window key presses
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
771 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
772 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
773
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
774 static gint collection_window_keypress(GtkWidget *widget, GdkEventKey *event, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
775 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
776 CollectWindow *cw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
777 gint stop_signal = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
778 gint edit_val = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
779 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
780
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
781 if (event->state & GDK_CONTROL_MASK)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
782 {
85
9d5c75b5ec28 Fri Oct 20 09:20:10 2006 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
783 stop_signal = TRUE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
784 switch (event->keyval)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
785 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
786 case '1':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
787 edit_val = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
788 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
789 case '2':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
790 edit_val = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
791 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
792 case '3':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
793 edit_val = 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
794 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
795 case '4':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
796 edit_val = 3;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
797 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
798 case '5':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
799 edit_val = 4;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
800 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
801 case '6':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
802 edit_val = 5;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
803 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
804 case '7':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
805 edit_val = 6;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
806 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
807 case '8':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
808 edit_val = 7;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
809 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
810 case '9':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
811 edit_val = 8;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
812 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
813 case '0':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
814 edit_val = 9;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
815 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
816 case 'A': case 'a':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
817 if (event->state & GDK_SHIFT_MASK)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
818 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
819 collection_table_unselect_all(cw->table);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
820 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
821 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
822 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
823 collection_table_select_all(cw->table);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
824 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
825 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
826 case 'L': case 'l':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
827 list = layout_list(NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
828 if (list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
829 {
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
830 collection_table_add_filelist(cw->table, list);
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
831 filelist_free(list);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
832 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
833 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
834 case 'C': case 'c':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
835 file_util_copy(NULL, collection_table_selection_get_list(cw->table), NULL, cw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
836 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
837 case 'M': case 'm':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
838 file_util_move(NULL, collection_table_selection_get_list(cw->table), NULL, cw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
839 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
840 case 'R': case 'r':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
841 file_util_rename(NULL, collection_table_selection_get_list(cw->table), cw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
842 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
843 case 'D': case 'd':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
844 file_util_delete(NULL, collection_table_selection_get_list(cw->table), cw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
845 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
846 case 'P': case 'p':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
847 info_window_new(NULL, collection_table_selection_get_list(cw->table));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
848 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
849 case 'S': case 's':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
850 collection_dialog_save_as(NULL, cw->cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
851 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
852 case 'W': case 'w':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
853 collection_window_close(cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
854 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
855 default:
85
9d5c75b5ec28 Fri Oct 20 09:20:10 2006 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
856 stop_signal = FALSE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
857 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
858 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
859 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
860 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
861 {
85
9d5c75b5ec28 Fri Oct 20 09:20:10 2006 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
862 stop_signal = TRUE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
863 switch (event->keyval)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
864 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
865 case GDK_Return: case GDK_KP_Enter:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
866 layout_image_set_collection(NULL, cw->cd,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
867 collection_table_get_focus_info(cw->table));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
868 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
869 case 'V': case 'v':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
870 view_window_new_from_collection(cw->cd,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
871 collection_table_get_focus_info(cw->table));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
872 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
873 case 'S': case 's':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
874 if (!cw->cd->path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
875 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
876 collection_dialog_save_as(NULL, cw->cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
877 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
878 else if (!collection_save(cw->cd, cw->cd->path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
879 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
880 printf("failed saving to collection path: %s\n", cw->cd->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
881 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
882 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
883 case 'A': case 'a':
85
9d5c75b5ec28 Fri Oct 20 09:20:10 2006 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
884 collection_dialog_append(NULL, cw->cd);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
885 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
886 case 'N': case 'n':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
887 collection_set_sort_method(cw->cd, SORT_NAME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
888 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
889 #ifdef HAVE_STRVERSCMP
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
890 case 'I': case 'i':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
891 collection_set_sort_method(cw->cd, SORT_NUMBER);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
892 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
893 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
894 case 'D': case 'd':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
895 collection_set_sort_method(cw->cd, SORT_TIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
896 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
897 case 'B': case 'b':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
898 collection_set_sort_method(cw->cd, SORT_SIZE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
899 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
900 case 'P': case 'p':
94
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
901 if (event->state & GDK_SHIFT_MASK)
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
902 {
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
903 CollectInfo *info;
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
904
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
905 info = collection_table_get_focus_info(cw->table);
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
906
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
907 print_window_new(info->fd, collection_table_selection_get_list(cw->table),
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
908 collection_list_to_filelist(cw->cd->list), cw->window);
94
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
909 }
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
910 else
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
911 {
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
912 collection_set_sort_method(cw->cd, SORT_PATH);
50dc5a14d37b Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents: 91
diff changeset
913 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
914 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
915 case GDK_Delete: case GDK_KP_Delete:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
916 list = g_list_copy(cw->table->selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
917 if (list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
918 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
919 collection_remove_by_info_list(cw->cd, list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
920 g_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
921 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
922 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
923 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
924 collection_remove_by_info(cw->cd, collection_table_get_focus_info(cw->table));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
925 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
926 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
927 default:
85
9d5c75b5ec28 Fri Oct 20 09:20:10 2006 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
928 stop_signal = FALSE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
929 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
930 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
931 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
932
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
933 if (edit_val != -1)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
934 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
935 list = collection_table_selection_get_list(cw->table);
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
936 start_editor_from_filelist(edit_val, list);
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 94
diff changeset
937 filelist_free(list);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
938 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
939
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
940 return stop_signal;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
941 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
942
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
943 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
944 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
945 * window
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
946 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
947 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
948 static void collection_window_get_geometry(CollectWindow *cw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
949 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
950 CollectionData *cd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
951
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
952 if (!cw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
953
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
954 cd = cw->cd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
955 gdk_window_get_position (cw->window->window, &cd->window_x, &cd->window_y);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
956 gdk_drawable_get_size(cw->window->window, &cd->window_w, &cd->window_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
957 cd->window_read = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
958 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
959
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
960 static void collection_window_refresh(CollectWindow *cw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
961 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
962 if (!cw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
963
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
964 collection_table_refresh(cw->table);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
965 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
966
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
967 static void collection_window_update_title(CollectWindow *cw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
968 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
969 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
970
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
971 if (!cw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
972
196
f6e307c7bad6 rename GQview -> Geeqie over the code
nadvornik
parents: 138
diff changeset
973 buf = g_strdup_printf(_("%s - Geeqie Collection"), cw->cd->name);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
974 gtk_window_set_title(GTK_WINDOW(cw->window), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
975 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
976 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
977
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
978 static void collection_window_update_info(CollectionData *cd, CollectInfo *ci, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
979 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
980 CollectWindow *cw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
981
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
982 collection_table_file_update(cw->table, ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
983 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
984
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
985 static void collection_window_add(CollectWindow *cw, CollectInfo *ci)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
986 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
987 if (!cw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
988
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
989 if (!ci->pixbuf) collection_load_thumb_idle(cw->cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
990 collection_table_file_add(cw->table, ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
991 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
992
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
993 static void collection_window_insert(CollectWindow *cw, CollectInfo *ci)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
994 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
995 if (!cw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
996
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
997 if (!ci->pixbuf) collection_load_thumb_idle(cw->cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
998 collection_table_file_insert(cw->table, ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
999 if (!cw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1000 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1001
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1002 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1003 static void collection_window_move(CollectWindow *cw, CollectInfo *ci)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1004 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1005 if (!cw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1006 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1007 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1008
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1009 static void collection_window_remove(CollectWindow *cw, CollectInfo *ci)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1010 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1011 if (!cw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1012
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1013 collection_table_file_remove(cw->table, ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1014 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1015
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1016 static void collection_window_update(CollectWindow *cw, CollectInfo *ci)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1017 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1018 if (!cw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1019
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1020 collection_table_file_update(cw->table, ci);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1021 collection_table_file_update(cw->table, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1022 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1023
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1024 static void collection_window_close_final(CollectWindow *cw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1025 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1026 if (cw->close_dialog) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1027
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1028 collection_window_list = g_list_remove(collection_window_list, cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1029 collection_window_get_geometry(cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1030
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1031 gtk_widget_destroy(cw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1032
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1033 collection_set_update_info_func(cw->cd, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1034 collection_unref(cw->cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1035
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1036 g_free(cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1037 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1038
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1039 static void collection_close_save_cb(GenericDialog *gd, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1040 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1041 CollectWindow *cw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1042
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1043 cw->close_dialog = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1044 generic_dialog_close(gd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1045
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1046 if (!cw->cd->path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1047 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1048 collection_dialog_save_close(NULL, cw->cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1049 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1050 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1051 else if (!collection_save(cw->cd, cw->cd->path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1052 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1053 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1054 buf = g_strdup_printf(_("Failed to save the collection:\n%s"), cw->cd->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1055 warning_dialog(_("Save Failed"), buf, GTK_STOCK_DIALOG_ERROR, cw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1056 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1057 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1058 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1059
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1060 collection_window_close_final(cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1061 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1062
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1063 static void collection_close_close_cb(GenericDialog *gd, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1064 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1065 CollectWindow *cw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1066
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1067 cw->close_dialog = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1068 generic_dialog_close(gd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1069
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1070 collection_window_close_final(cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1071 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1072
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1073 static void collection_close_cancel_cb(GenericDialog *gd, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1074 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1075 CollectWindow *cw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1076
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1077 cw->close_dialog = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1078 generic_dialog_close(gd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1079 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1080
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1081 static void collection_close_dlg_show(CollectWindow *cw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1082 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1083 GenericDialog *gd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1084
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1085 if (cw->close_dialog)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1086 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1087 gtk_window_present(GTK_WINDOW(cw->close_dialog));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1088 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1089 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1090
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1091 gd = generic_dialog_new(_("Close collection"),
254
9faf34f047b1 Make the wmclass value unique among the code by defining
zas_
parents: 196
diff changeset
1092 GQ_WMCLASS, "close_collection", cw->window, FALSE,
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1093 collection_close_cancel_cb, cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1094 generic_dialog_add_message(gd, GTK_STOCK_DIALOG_QUESTION,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1095 _("Close collection"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1096 _("Collection has been modified.\nSave first?"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1097
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1098 generic_dialog_add_button(gd, GTK_STOCK_SAVE, NULL, collection_close_save_cb, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1099 generic_dialog_add_button(gd, GTK_STOCK_DELETE, _("_Discard"), collection_close_close_cb, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1100
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1101 cw->close_dialog = gd->dialog;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1102
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1103 gtk_widget_show(gd->dialog);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1104 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1105
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1106 static void collection_window_close(CollectWindow *cw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1107 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1108 if (!cw->cd->changed && !cw->close_dialog)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1109 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1110 collection_window_close_final(cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1111 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1112 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1113
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1114 collection_close_dlg_show(cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1115 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1116
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1117 void collection_window_close_by_collection(CollectionData *cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1118 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1119 CollectWindow *cw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1120
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1121 cw = collection_window_find(cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1122 if (cw) collection_window_close_final(cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1123 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1124
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1125 gint collection_window_modified_exists(void)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1126 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1127 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1128
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1129 work = collection_window_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1130 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1131 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1132 CollectWindow *cw = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1133 if (cw->cd->changed) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1134 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1135 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1136
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1137 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1138 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1139
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1140 static gint collection_window_delete(GtkWidget *widget, GdkEvent *event, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1141 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1142 CollectWindow *cw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1143 collection_window_close(cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1144
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1145 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1146 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1147
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1148 CollectWindow *collection_window_new(const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1149 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1150 CollectWindow *cw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1151 GtkWidget *vbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1152 GtkWidget *frame;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1153 GtkWidget *status_label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1154 GtkWidget *extra_label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1155 GdkGeometry geometry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1156
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1157 cw = g_new0(CollectWindow, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1158
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1159 cw->close_dialog = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1160
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1161 collection_window_list = g_list_append(collection_window_list, cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1162
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1163 cw->cd = collection_new(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1164
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1165 cw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
91
d063f97503b7 Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents: 85
diff changeset
1166 window_set_icon(cw->window, PIXBUF_INLINE_ICON_BOOK, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1167
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1168 geometry.min_width = 32;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1169 geometry.min_height = 32;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1170 geometry.base_width = COLLECT_DEF_WIDTH;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1171 geometry.base_height = COLLECT_DEF_HEIGHT;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1172 gtk_window_set_geometry_hints(GTK_WINDOW(cw->window), NULL, &geometry,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1173 GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1174
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1175
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1176 if (save_window_positions && path && collection_load_only_geometry(cw->cd, path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1177 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1178 /* FIXME: x, y is not implemented */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1179 gtk_window_set_default_size(GTK_WINDOW(cw->window), cw->cd->window_w, cw->cd->window_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1180 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1181 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1182 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1183 gtk_window_set_default_size(GTK_WINDOW(cw->window), COLLECT_DEF_WIDTH, COLLECT_DEF_HEIGHT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1184 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1185
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1186 gtk_window_set_resizable(GTK_WINDOW(cw->window), TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1187 collection_window_update_title(cw);
254
9faf34f047b1 Make the wmclass value unique among the code by defining
zas_
parents: 196
diff changeset
1188 gtk_window_set_wmclass(GTK_WINDOW(cw->window), "collection", GQ_WMCLASS);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1189 gtk_container_set_border_width (GTK_CONTAINER (cw->window), 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1190
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1191 g_signal_connect(G_OBJECT(cw->window), "delete_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1192 G_CALLBACK(collection_window_delete), cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1193
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1194 g_signal_connect(G_OBJECT(cw->window),"key_press_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1195 G_CALLBACK(collection_window_keypress), cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1196
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1197 vbox = gtk_vbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1198 gtk_container_add(GTK_CONTAINER(cw->window), vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1199 gtk_widget_show(vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1200
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1201 cw->table = collection_table_new(cw->cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1202 gtk_box_pack_start(GTK_BOX(vbox), cw->table->scrolled, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1203 gtk_widget_show(cw->table->scrolled);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1204
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1205 cw->status_box = gtk_hbox_new(TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1206 gtk_box_pack_start(GTK_BOX(vbox), cw->status_box, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1207 gtk_widget_show(cw->status_box);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1208
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1209 frame = gtk_frame_new(NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1210 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1211 gtk_box_pack_start(GTK_BOX(cw->status_box), frame, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1212 gtk_widget_show(frame);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1213
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1214 status_label = gtk_label_new("");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1215 gtk_container_add(GTK_CONTAINER(frame), status_label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1216 gtk_widget_show(status_label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1217
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1218 extra_label = gtk_progress_bar_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1219 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(extra_label), 0.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1220 gtk_box_pack_start(GTK_BOX(cw->status_box), extra_label, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1221 gtk_widget_show(extra_label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1222
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1223 collection_table_set_labels(cw->table, status_label, extra_label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1224
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1225 gtk_widget_show(cw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1226 gtk_widget_grab_focus(cw->table->listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1227
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1228 collection_set_update_info_func(cw->cd, collection_window_update_info, cw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1229
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1230 if (path && *path == '/') collection_load_begin(cw->cd, NULL, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1231
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1232 return cw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1233 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1234