Mon, 26 Mar 2007 01:19:59 +0000
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 |