finch/libgnt/gntfilesel.c

Mon, 26 Mar 2007 01:19:59 +0000

author
Sadrul Habib Chowdhury <sadrul@pidgin.im>
date
Mon, 26 Mar 2007 01:19:59 +0000
changeset 15986
49c0e6c8c116
parent 15985
375cc05bf77a
child 15987
71d668c3d56d
child 15988
fa9915cd51dd
permissions
-rw-r--r--

Allow selecting multiple files from the file-select dialog.
You need to tag the files by pressing 't' to select the files. It is possible
to tag files from different locations, ie. when you change the directory, the
tags are remembered. You can untag a selection by pressing 't' again. To untag
all selections, press 'c'.

15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1 #include "gntbutton.h"
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
2 #include "gntentry.h"
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
3 #include "gntfilesel.h"
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
4 #include "gntlabel.h"
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
5 #include "gntmarshal.h"
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
6 #include "gntstyle.h"
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
7 #include "gnttree.h"
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
8
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
9 #include <string.h>
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
10 #include <sys/types.h>
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
11 #include <sys/stat.h>
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
12 #include <unistd.h>
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
13
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
14 #include <glob.h>
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
15
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
16 enum
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
17 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
18 SIG_FILE_SELECTED,
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
19 SIGS
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
20 };
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
21
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
22 static GntWindowClass *parent_class = NULL;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
23 static guint signals[SIGS] = { 0 };
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
24 static void (*orig_map)(GntWidget *widget);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
25
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
26 static void
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
27 gnt_file_sel_destroy(GntWidget *widget)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
28 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
29 GntFileSel *sel = GNT_FILE_SEL(widget);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
30 g_free(sel->current);
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
31 if (sel->tags) {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
32 g_list_foreach(sel->tags, (GFunc)g_free, NULL);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
33 g_list_free(sel->tags);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
34 }
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
35 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
36
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
37 static char *
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
38 process_path(const char *path)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
39 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
40 char **splits = NULL;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
41 int i, j;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
42 char *str, *ret;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
43
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
44 splits = g_strsplit(path, G_DIR_SEPARATOR_S, -1);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
45 for (i = 0, j = 0; splits[i]; i++) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
46 if (strcmp(splits[i], ".") == 0) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
47 } else if (strcmp(splits[i], "..") == 0) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
48 if (j)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
49 j--;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
50 } else {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
51 if (i != j) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
52 g_free(splits[j]);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
53 splits[j] = splits[i];
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
54 splits[i] = NULL;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
55 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
56 j++;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
57 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
58 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
59 g_free(splits[j]);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
60 splits[j] = NULL;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
61 str = g_build_pathv(G_DIR_SEPARATOR_S, splits);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
62 ret = g_strdup_printf(G_DIR_SEPARATOR_S "%s", str);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
63 g_free(str);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
64 g_strfreev(splits);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
65 return ret;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
66 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
67
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
68 static void
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
69 update_location(GntFileSel *sel)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
70 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
71 char *old;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
72 const char *tmp;
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
73 tmp = (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
74 old = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : "");
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
75 gnt_entry_set_text(GNT_ENTRY(sel->location), old);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
76 g_free(old);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
77 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
78
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
79 static gboolean
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
80 is_tagged(GntFileSel *sel, const char *f)
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
81 {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
82 char *ret = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", f);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
83 gboolean find = g_list_find_custom(sel->tags, ret, (GCompareFunc)g_utf8_collate) != NULL;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
84 g_free(ret);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
85 return find;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
86 }
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
87
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
88 static gboolean
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
89 location_changed(GntFileSel *sel, GError **err)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
90 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
91 GDir *dir;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
92 const char *str;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
93
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
94 if (!sel->dirs)
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
95 return TRUE;
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
96
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
97 gnt_tree_remove_all(GNT_TREE(sel->dirs));
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
98 if (sel->files)
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
99 gnt_tree_remove_all(GNT_TREE(sel->files));
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
100 gnt_entry_set_text(GNT_ENTRY(sel->location), NULL);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
101 if (sel->current == NULL) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
102 if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(sel), GNT_WIDGET_MAPPED))
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
103 gnt_widget_draw(GNT_WIDGET(sel));
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
104 return TRUE;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
105 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
106
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
107 dir = g_dir_open(sel->current, 0, err);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
108 if (dir == NULL || *err) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
109 g_printerr("GntFileSel: error opening location %s (%s)\n",
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
110 sel->current, *err ? (*err)->message : "reason unknown");
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
111 return FALSE;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
112 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
113
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
114 if (*sel->current != '\0' && strcmp(sel->current, G_DIR_SEPARATOR_S))
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
115 gnt_tree_add_row_after(GNT_TREE(sel->dirs), g_strdup(".."),
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
116 gnt_tree_create_row(GNT_TREE(sel->dirs), ".."), NULL, NULL);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
117
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
118 while ((str = g_dir_read_name(dir)) != NULL) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
119 char *fp = g_build_filename(sel->current, str, NULL);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
120 struct stat st;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
121
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
122 if (stat(fp, &st)) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
123 g_printerr("Error stating location %s\n", fp);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
124 } else {
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
125 if (S_ISDIR(st.st_mode)) {
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
126 gnt_tree_add_row_after(GNT_TREE(sel->dirs), g_strdup(str),
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
127 gnt_tree_create_row(GNT_TREE(sel->dirs), str), NULL, NULL);
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
128 if (sel->multiselect && sel->dirsonly && is_tagged(sel, str))
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
129 gnt_tree_set_row_flags(GNT_TREE(sel->dirs), (gpointer)str, GNT_TEXT_FLAG_BOLD);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
130 } else if (!sel->dirsonly) {
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
131 char size[128];
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
132 snprintf(size, sizeof(size), "%ld", (long)st.st_size);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
133
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
134 gnt_tree_add_row_after(GNT_TREE(sel->files), g_strdup(str),
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
135 gnt_tree_create_row(GNT_TREE(sel->files), str, size, ""), NULL, NULL);
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
136 if (sel->multiselect && is_tagged(sel, str))
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
137 gnt_tree_set_row_flags(GNT_TREE(sel->files), (gpointer)str, GNT_TEXT_FLAG_BOLD);
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
138 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
139 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
140 g_free(fp);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
141 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
142 if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(sel), GNT_WIDGET_MAPPED))
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
143 gnt_widget_draw(GNT_WIDGET(sel));
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
144 return TRUE;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
145 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
146
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
147 static gboolean
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
148 dir_key_pressed(GntTree *tree, const char *key, GntFileSel *sel)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
149 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
150 if (strcmp(key, "\r") == 0) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
151 char *str = g_strdup(gnt_tree_get_selection_data(tree));
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
152 char *path = g_build_filename(sel->current, str, NULL);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
153 char *dir = g_path_get_basename(sel->current);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
154 if (!gnt_file_sel_set_current_location(sel, path)) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
155 gnt_tree_set_selected(tree, str);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
156 } else if (strcmp(str, "..") == 0) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
157 gnt_tree_set_selected(tree, dir);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
158 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
159 g_free(dir);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
160 g_free(str);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
161 g_free(path);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
162 return TRUE;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
163 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
164 return FALSE;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
165 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
166
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
167 static gboolean
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
168 location_key_pressed(GntTree *tree, const char *key, GntFileSel *sel)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
169 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
170 if (strcmp(key, "\r") == 0) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
171 int count;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
172 glob_t gl;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
173 char *path;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
174 char *str;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
175 struct stat st;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
176 int glob_ret;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
177
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
178 str = (char*)gnt_entry_get_text(GNT_ENTRY(sel->location));
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
179 if (*str == G_DIR_SEPARATOR)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
180 path = g_strdup(str);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
181 else
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
182 path = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", sel->current, str);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
183 str = process_path(path);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
184 g_free(path);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
185 path = str;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
186
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
187 if (!stat(path, &st)) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
188 if (S_ISDIR(st.st_mode)) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
189 gnt_file_sel_set_current_location(sel, path);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
190 goto success;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
191 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
192 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
193
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
194 glob_ret = glob(path, GLOB_MARK, NULL, &gl);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
195 if (!glob_ret) { /* XXX: do something with the return value */
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
196 char *loc = g_path_get_dirname(gl.gl_pathv[0]);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
197
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
198 stat(gl.gl_pathv[0], &st);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
199 gnt_file_sel_set_current_location(sel, loc); /* XXX: check the return value */
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
200 g_free(loc);
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
201 if (!S_ISDIR(st.st_mode) && !sel->dirsonly) {
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
202 gnt_tree_remove_all(GNT_TREE(sel->files));
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
203 for (count = 0; count < gl.gl_pathc; count++) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
204 char *tmp = process_path(gl.gl_pathv[count]);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
205 loc = g_path_get_dirname(tmp);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
206 if (g_utf8_collate(sel->current, loc) == 0) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
207 char *base = g_path_get_basename(tmp);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
208 char size[128];
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
209 snprintf(size, sizeof(size), "%ld", (long)st.st_size);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
210 gnt_tree_add_row_after(GNT_TREE(sel->files), base,
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
211 gnt_tree_create_row(GNT_TREE(sel->files), base, size, ""), NULL, NULL);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
212 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
213 g_free(loc);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
214 g_free(tmp);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
215 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
216 gnt_widget_draw(sel->files);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
217 }
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
218 } else if (sel->files) {
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
219 gnt_tree_remove_all(GNT_TREE(sel->files));
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
220 gnt_widget_draw(sel->files);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
221 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
222 globfree(&gl);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
223 success:
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
224 g_free(path);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
225 return TRUE;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
226 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
227 return FALSE;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
228 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
229
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
230 static void
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
231 file_sel_changed(GntWidget *widget, gpointer old, gpointer current, GntFileSel *sel)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
232 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
233 update_location(sel);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
234 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
235
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
236 static void
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
237 gnt_file_sel_map(GntWidget *widget)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
238 {
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
239 GntFileSel *sel = GNT_FILE_SEL(widget);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
240 GntWidget *hbox, *vbox;
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
241
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
242 vbox = gnt_vbox_new(FALSE);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
243 gnt_box_set_pad(GNT_BOX(vbox), 0);
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
244 gnt_box_set_alignment(GNT_BOX(vbox), GNT_ALIGN_MID);
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
245
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
246 /* The dir. and files list */
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
247 hbox = gnt_hbox_new(FALSE);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
248 gnt_box_set_pad(GNT_BOX(hbox), 0);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
249
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
250 gnt_box_add_widget(GNT_BOX(hbox), sel->dirs);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
251
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
252 if (!sel->dirsonly) {
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
253 gnt_box_add_widget(GNT_BOX(hbox), sel->files);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
254 } else {
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
255 g_signal_connect(G_OBJECT(sel->dirs), "selection_changed", G_CALLBACK(file_sel_changed), sel);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
256 }
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
257
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
258 gnt_box_add_widget(GNT_BOX(vbox), hbox);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
259 gnt_box_add_widget(GNT_BOX(vbox), sel->location);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
260
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
261 /* The buttons */
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
262 hbox = gnt_hbox_new(FALSE);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
263 gnt_box_add_widget(GNT_BOX(hbox), sel->cancel);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
264 gnt_box_add_widget(GNT_BOX(hbox), sel->select);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
265 gnt_box_add_widget(GNT_BOX(vbox), hbox);
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
266
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
267 gnt_box_add_widget(GNT_BOX(sel), vbox);
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
268 orig_map(widget);
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
269 update_location(sel);
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
270 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
271
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
272 static gboolean
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
273 toggle_tag_selection(GntBindable *bind, GList *null)
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
274 {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
275 GntFileSel *sel = GNT_FILE_SEL(bind);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
276 char *str;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
277 GList *find;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
278 char *file;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
279 GntWidget *tree;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
280
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
281 if (!sel->multiselect)
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
282 return FALSE;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
283 tree = sel->dirsonly ? sel->dirs : sel->files;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
284 if (!gnt_widget_has_focus(tree))
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
285 return FALSE;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
286
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
287 file = gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
288
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
289 str = gnt_file_sel_get_selected_file(sel);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
290 if ((find = g_list_find_custom(sel->tags, str, (GCompareFunc)g_utf8_collate)) != NULL) {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
291 g_free(find->data);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
292 sel->tags = g_list_delete_link(sel->tags, find);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
293 gnt_tree_set_row_flags(GNT_TREE(tree), file, GNT_TEXT_FLAG_NORMAL);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
294 g_free(str);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
295 } else {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
296 sel->tags = g_list_prepend(sel->tags, str);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
297 gnt_tree_set_row_flags(GNT_TREE(tree), file, GNT_TEXT_FLAG_BOLD);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
298 }
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
299
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
300 return TRUE;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
301 }
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
302
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
303 static gboolean
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
304 clear_tags(GntBindable *bind, GList *null)
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
305 {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
306 GntFileSel *sel = GNT_FILE_SEL(bind);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
307 GntWidget *tree;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
308 GList *iter;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
309
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
310 if (!sel->multiselect)
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
311 return FALSE;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
312 tree = sel->dirsonly ? sel->dirs : sel->files;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
313 if (!gnt_widget_has_focus(tree))
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
314 return FALSE;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
315
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
316 g_list_foreach(sel->tags, (GFunc)g_free, NULL);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
317 g_list_free(sel->tags);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
318 sel->tags = NULL;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
319
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
320 for (iter = GNT_TREE(tree)->list; iter; iter = iter->next)
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
321 gnt_tree_set_row_flags(GNT_TREE(tree), iter->data, GNT_TEXT_FLAG_NORMAL);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
322
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
323 return TRUE;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
324 }
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
325
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
326 static void
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
327 gnt_file_sel_class_init(GntFileSelClass *klass)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
328 {
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
329 GntBindableClass *bindable = GNT_BINDABLE_CLASS(klass);
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
330 GntWidgetClass *kl = GNT_WIDGET_CLASS(klass);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
331 parent_class = GNT_WINDOW_CLASS(klass);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
332 kl->destroy = gnt_file_sel_destroy;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
333 orig_map = kl->map;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
334 kl->map = gnt_file_sel_map;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
335
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
336 signals[SIG_FILE_SELECTED] =
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
337 g_signal_new("file_selected",
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
338 G_TYPE_FROM_CLASS(klass),
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
339 G_SIGNAL_RUN_LAST,
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
340 G_STRUCT_OFFSET(GntFileSelClass, file_selected),
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
341 NULL, NULL,
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
342 gnt_closure_marshal_VOID__STRING_STRING,
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
343 G_TYPE_NONE, 0);
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
344
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
345 gnt_bindable_class_register_action(bindable, "toggle-tag", toggle_tag_selection, "t", NULL);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
346 gnt_bindable_class_register_action(bindable, "clear-tags", clear_tags, "c", NULL);
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
347 gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass));
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
348
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
349 GNTDEBUG;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
350 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
351
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
352 static void
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
353 gnt_file_sel_init(GTypeInstance *instance, gpointer class)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
354 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
355 GNTDEBUG;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
356 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
357
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
358 /******************************************************************************
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
359 * GntFileSel API
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
360 *****************************************************************************/
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
361 GType
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
362 gnt_file_sel_get_gtype(void)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
363 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
364 static GType type = 0;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
365
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
366 if(type == 0)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
367 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
368 static const GTypeInfo info = {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
369 sizeof(GntFileSelClass),
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
370 NULL, /* base_init */
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
371 NULL, /* base_finalize */
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
372 (GClassInitFunc)gnt_file_sel_class_init,
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
373 NULL, /* class_finalize */
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
374 NULL, /* class_data */
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
375 sizeof(GntFileSel),
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
376 0, /* n_preallocs */
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
377 gnt_file_sel_init, /* instance_init */
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
378 NULL
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
379 };
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
380
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
381 type = g_type_register_static(GNT_TYPE_WINDOW,
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
382 "GntFileSel",
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
383 &info, 0);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
384 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
385
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
386 return type;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
387 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
388
15972
894a15d885ec This was giving me a warning saying the function wasn't previously declared
Mark Doliner <markdoliner@pidgin.im>
parents: 15911
diff changeset
389 GntWidget *gnt_file_sel_new(void)
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
390 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
391 GntWidget *widget = g_object_new(GNT_TYPE_FILE_SEL, NULL);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
392 GntFileSel *sel = GNT_FILE_SEL(widget);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
393
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
394 sel->dirs = gnt_tree_new();
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
395 gnt_tree_set_compare_func(GNT_TREE(sel->dirs), (GCompareFunc)g_utf8_collate);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
396 gnt_tree_set_hash_fns(GNT_TREE(sel->dirs), g_str_hash, g_str_equal, g_free);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
397 gnt_tree_set_column_titles(GNT_TREE(sel->dirs), "Directories");
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
398 gnt_tree_set_show_title(GNT_TREE(sel->dirs), TRUE);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
399 gnt_tree_set_col_width(GNT_TREE(sel->dirs), 0, 20);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
400 g_signal_connect(G_OBJECT(sel->dirs), "key_pressed", G_CALLBACK(dir_key_pressed), sel);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
401
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
402 sel->files = gnt_tree_new_with_columns(2); /* Name, Size */
15902
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
403 gnt_tree_set_compare_func(GNT_TREE(sel->files), (GCompareFunc)g_utf8_collate);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
404 gnt_tree_set_column_titles(GNT_TREE(sel->files), "Filename", "Size");
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
405 gnt_tree_set_show_title(GNT_TREE(sel->files), TRUE);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
406 gnt_tree_set_col_width(GNT_TREE(sel->files), 0, 25);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
407 gnt_tree_set_col_width(GNT_TREE(sel->files), 1, 10);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
408 g_signal_connect(G_OBJECT(sel->files), "selection_changed", G_CALLBACK(file_sel_changed), sel);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
409
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
410 /* The location entry */
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
411 sel->location = gnt_entry_new(NULL);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
412 g_signal_connect(G_OBJECT(sel->location), "key_pressed", G_CALLBACK(location_key_pressed), sel);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
413
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
414 sel->cancel = gnt_button_new("Cancel");
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
415 sel->select = gnt_button_new("Select");
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
416
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
417 return widget;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
418 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
419
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
420 gboolean gnt_file_sel_set_current_location(GntFileSel *sel, const char *path)
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
421 {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
422 char *old;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
423 GError *error = NULL;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
424 gboolean ret = TRUE;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
425
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
426 old = sel->current;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
427 sel->current = process_path(path);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
428 if (!location_changed(sel, &error)) {
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
429 g_error_free(error);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
430 error = NULL;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
431 g_free(sel->current);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
432 sel->current = old;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
433 location_changed(sel, &error);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
434 ret = FALSE;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
435 } else
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
436 g_free(old);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
437
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
438 update_location(sel);
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
439 return ret;
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
440 }
b2dad43782a1 File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
441
15911
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
442 void gnt_file_sel_set_dirs_only(GntFileSel *sel, gboolean dirs)
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
443 {
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
444 sel->dirsonly = dirs;
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
445 }
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
446
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
447 gboolean gnt_file_sel_get_dirs_only(GntFileSel *sel)
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
448 {
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
449 return sel->dirsonly;
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
450 }
942565fe33f0 Directory only selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15902
diff changeset
451
15912
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
452 char *gnt_file_sel_get_selected_file(GntFileSel *sel)
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
453 {
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
454 char *ret;
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
455 const char *tmp;
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
456 tmp = (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
457 ret = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : "");
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
458 return ret;
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
459 }
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
460
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
461 void gnt_file_sel_set_must_exist(GntFileSel *sel, gboolean must)
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
462 {
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
463 /*XXX: What do I do with this? */
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
464 sel->must_exist = must;
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
465 }
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
466
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
467 gboolean gnt_file_sel_get_must_exist(GntFileSel *sel)
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
468 {
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
469 return sel->must_exist;
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
470 }
7401338df45b Use the file selector for request-file.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15911
diff changeset
471
15986
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
472 void gnt_file_sel_set_multi_select(GntFileSel *sel, gboolean set)
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
473 {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
474 sel->multiselect = set;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
475 }
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
476
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
477 GList *gnt_file_sel_get_selected_multi_files(GntFileSel *sel)
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
478 {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
479 GList *list = NULL, *iter;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
480 char *str = gnt_file_sel_get_selected_file(sel);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
481
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
482 for (iter = sel->tags; iter; iter = iter->next) {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
483 list = g_list_prepend(list, g_strdup(iter->data));
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
484 if (g_utf8_collate(str, iter->data)) {
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
485 g_free(str);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
486 str = NULL;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
487 }
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
488 }
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
489 if (str)
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
490 list = g_list_prepend(list, str);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
491 list = g_list_reverse(list);
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
492 return list;
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
493 }
49c0e6c8c116 Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15985
diff changeset
494

mercurial