annotate src/pathsel.c @ 8:e0d0593d519e

Sync to GQview 1.5.9 release. ######## DO NOT BASE ENHANCEMENTS OR TRANSLATION UPDATES ON CODE IN THIS CVS! This CVS is never up to date with current development and is provided solely for reference purposes, please use the latest official release package when making any changes or translation updates. ########
author gqview
date Sat, 26 Feb 2005 00:07:07 +0000
parents c0e337a01cb7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
2 * GQview image viewer
3
gqview
parents: 1
diff changeset
3 * (C)2000 John Ellis
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
4 *
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
5 * Author: John Ellis
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
6 *
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
7 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
8
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
9 #include "gqview.h"
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
10
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
11 #define DEST_WIDTH 250
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
12 #define DEST_HEIGHT 100
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
13
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
14 typedef struct _Dest_Data Dest_Data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
15 struct _Dest_Data
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
16 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
17 GtkWidget *d_clist;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
18 GtkWidget *f_clist;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
19 GtkWidget *entry;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
20 gchar *filter;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
21 gchar *path;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
22 };
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
23
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
24 static void dest_free_data(GtkWidget *widget, gpointer data);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
25 static gint dest_check_filter(gchar *filter, gchar *file);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
26 static gint dest_sort_cb(void *a, void *b);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
27 static void dest_populate(Dest_Data *dd, gchar *path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
28 static void dest_select_cb(GtkWidget *clist, gint row, gint column,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
29 GdkEventButton *bevent, gpointer data);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
30
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
31 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
32 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
33 * destination widget routines (private)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
34 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
35 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
36
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
37 static void dest_free_data(GtkWidget *widget, gpointer data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
38 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
39 Dest_Data *dd = data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
40 g_free(dd->filter);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
41 g_free(dd->path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
42 g_free(dd);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
43 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
44
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
45 static gint dest_check_filter(gchar *filter, gchar *file)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
46 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
47 gchar *f_ptr = filter;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
48 gchar *file_ptr;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
49 gchar *strt_ptr;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
50 gint i;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
51
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
52 if (filter[0] == '*') return TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
53 while (f_ptr < filter + strlen(filter))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
54 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
55 strt_ptr = f_ptr;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
56 i=0;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
57 while (*f_ptr != ';' && *f_ptr != '\0')
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
58 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
59 f_ptr++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
60 i++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
61 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
62 f_ptr++;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
63 file_ptr = file + strlen(file) - i;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
64 if (!strncasecmp(file_ptr, strt_ptr, i)) return TRUE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
65 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
66 return FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
67 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
68
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
69 static gint dest_sort_cb(void *a, void *b)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
70 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
71 return strcmp((gchar *)a, (gchar *)b);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
72 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
73
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
74 static void dest_populate(Dest_Data *dd, gchar *path)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
75 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
76 DIR *dp;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
77 struct dirent *dir;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
78 struct stat ent_sbuf;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
79 gchar *buf[2];
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
80 GList *path_list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
81 GList *file_list = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
82 GList *list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
83
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
84 buf[1] = NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
85
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
86 if((dp = opendir(path))==NULL)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
87 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
88 /* dir not found */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
89 return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
90 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
91 while ((dir = readdir(dp)) != NULL)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
92 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
93 /* skips removed files */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
94 if (dir->d_ino > 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
95 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
96 gchar *name = dir->d_name;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
97 gchar *filepath = g_strconcat(path, "/", name, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
98 if (stat(filepath,&ent_sbuf) >= 0 && S_ISDIR(ent_sbuf.st_mode))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
99 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
100 path_list = g_list_prepend(path_list, g_strdup(name));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
101 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
102 else if (dd->f_clist)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
103 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
104 if (!dd->filter || (dd->filter && dest_check_filter(dd->filter, name)))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
105 file_list = g_list_prepend(file_list, g_strdup(name));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
106 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
107 g_free(filepath);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
108 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
109 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
110 closedir(dp);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
111
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
112 path_list = g_list_sort(path_list, (GCompareFunc) dest_sort_cb);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
113 file_list = g_list_sort(file_list, (GCompareFunc) dest_sort_cb);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
114
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
115 gtk_clist_freeze(GTK_CLIST(dd->d_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
116 gtk_clist_clear(GTK_CLIST(dd->d_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
117
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
118 list = path_list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
119 while (list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
120 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
121 gint row;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
122 gchar *filepath;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
123 if (strcmp(list->data, ".") == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
124 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
125 filepath = g_strdup(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
126 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
127 else if (strcmp(list->data, "..") == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
128 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
129 gchar *p;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
130 filepath = g_strdup(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
131 p = filename_from_path(filepath);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
132 if (p - 1 != filepath) p--;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
133 p[0] = '\0';
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
134 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
135 else if (strcmp(path, "/") == 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
136 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
137 filepath = g_strconcat("/", list->data, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
138 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
139 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
140 filepath = g_strconcat(path, "/", list->data, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
141
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
142 buf[0] = list->data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
143 row = gtk_clist_append(GTK_CLIST(dd->d_clist),buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
144 gtk_clist_set_row_data_full(GTK_CLIST(dd->d_clist), row,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
145 filepath, (GtkDestroyNotify) g_free);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
146 g_free(list->data);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
147 list = list->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
148 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
149
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
150 g_list_free(path_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
151
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
152 gtk_clist_thaw(GTK_CLIST(dd->d_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
153
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
154 if (dd->f_clist)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
155 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
156 gtk_clist_freeze(GTK_CLIST(dd->f_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
157 gtk_clist_clear(GTK_CLIST(dd->f_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
158
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
159 list = file_list;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
160 while (list)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
161 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
162 gint row;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
163 gchar *filepath;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
164 filepath = g_strconcat(path, "/", list->data, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
165
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
166 buf[0] = list->data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
167 row = gtk_clist_append(GTK_CLIST(dd->f_clist),buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
168 gtk_clist_set_row_data_full(GTK_CLIST(dd->f_clist), row,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
169 filepath, (GtkDestroyNotify) g_free);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
170 g_free(list->data);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
171 list = list->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
172 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
173
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
174 g_list_free(file_list);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
175
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
176 gtk_clist_thaw(GTK_CLIST(dd->f_clist));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
177 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
178
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
179 g_free(dd->path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
180 dd->path = g_strdup(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
181 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
182
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
183 static void dest_select_cb(GtkWidget *clist, gint row, gint column,
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
184 GdkEventButton *bevent, gpointer data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
185 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
186 Dest_Data *dd = data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
187 gchar *path = g_strdup(gtk_clist_get_row_data(GTK_CLIST(clist), row));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
188 gtk_entry_set_text(GTK_ENTRY(dd->entry),path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
189
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
190 if (clist == dd->d_clist) dest_populate(dd, path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
191 g_free(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
192 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
193
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
194 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
195 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
196 * destination widget setup routines (public)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
197 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
198 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
199
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
200 GtkWidget *destination_widget_new_with_files(gchar *path, gchar *filter, GtkWidget *entry)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
201 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
202 GtkWidget *vbox;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
203 Dest_Data *dd;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
204 GtkWidget *scrolled;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
205
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
206 dd = g_new0(Dest_Data, 1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
207
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
208 vbox = gtk_vbox_new(FALSE, 5);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
209 gtk_widget_show(vbox);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
210
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
211 dd->entry = entry;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
212 gtk_object_set_data(GTK_OBJECT(dd->entry), "destination_data", dd);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
213
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
214 scrolled = gtk_scrolled_window_new(NULL, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
215 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
216 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
217 gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
218 gtk_widget_show(scrolled);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
219
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
220 dd->d_clist=gtk_clist_new (1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
221 gtk_clist_set_column_auto_resize(GTK_CLIST(dd->d_clist), 0, TRUE);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
222 gtk_signal_connect (GTK_OBJECT (dd->d_clist), "select_row",(GtkSignalFunc) dest_select_cb, dd);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
223 gtk_signal_connect(GTK_OBJECT(dd->d_clist), "destroy", (GtkSignalFunc) dest_free_data, dd);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
224 gtk_widget_set_usize(dd->d_clist, DEST_WIDTH, DEST_HEIGHT);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
225 gtk_container_add (GTK_CONTAINER (scrolled), dd->d_clist);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
226 gtk_widget_show (dd->d_clist);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
227
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
228 if (filter)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
229 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
230 scrolled = gtk_scrolled_window_new(NULL, NULL);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
231 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
232 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
233 gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
234 gtk_widget_show(scrolled);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
235
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
236 dd->f_clist=gtk_clist_new (1);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
237 gtk_clist_set_column_auto_resize(GTK_CLIST(dd->f_clist), 0, TRUE);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
238 gtk_widget_set_usize(dd->f_clist, DEST_WIDTH, DEST_HEIGHT);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
239 gtk_signal_connect (GTK_OBJECT (dd->f_clist), "select_row",(GtkSignalFunc) dest_select_cb, dd);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
240 gtk_container_add (GTK_CONTAINER (scrolled), dd->f_clist);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
241 gtk_widget_show (dd->f_clist);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
242
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
243 dd->filter = g_strdup(filter);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
244 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
245
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
246 if (isdir(path))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
247 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
248 dest_populate(dd, path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
249 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
250 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
251 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
252 gchar *buf = remove_level_from_path(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
253 if (isdir(buf))
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
254 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
255 dest_populate(dd, buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
256 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
257 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
258 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
259 dest_populate(dd, homedir());
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
260 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
261 g_free(buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
262 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
263 return vbox;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
264 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
265
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
266 GtkWidget *destination_widget_new(gchar *path, GtkWidget *entry)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
267 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
268 return destination_widget_new_with_files(path, NULL, entry);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
269 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
270
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
271 void destination_widget_sync_to_entry(GtkWidget *entry)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
272 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
273 Dest_Data *dd = gtk_object_get_data(GTK_OBJECT(entry), "destination_data");
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
274 gchar *path;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
275
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
276 if (!dd) return;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
277
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
278 path = gtk_entry_get_text(GTK_ENTRY(entry));
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
279
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
280 if (isdir(path) && strcmp(path, dd->path) != 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
281 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
282 dest_populate(dd, path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
283 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
284 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
285 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
286 gchar *buf = remove_level_from_path(path);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
287 if (isdir(buf) && strcmp(buf, dd->path) != 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
288 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
289 dest_populate(dd, buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
290 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
291 g_free(buf);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
292 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
293 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
294