Mercurial > pidgin
annotate finch/libgnt/gntfilesel.c @ 32751:6b80dbe29e0c
I'm really going to try to release Tuesday night. I'm going to try to
confirm that we still build on windows... but if anyone else wants to
test it, that would be good, too
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 12 Mar 2012 08:56:12 +0000 |
parents | a8cc50c2279f |
children |
rev | line source |
---|---|
17928
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
1 /** |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
2 * GNT - The GLib Ncurses Toolkit |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
3 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
4 * GNT is the legal property of its developers, whose names are too numerous |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
6 * source distribution. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
7 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
8 * This library is free software; you can redistribute it and/or modify |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
11 * (at your option) any later version. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
12 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
16 * GNU General Public License for more details. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
17 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19378
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
17928
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
21 */ |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16203
diff
changeset
|
22 |
24558
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
23 #include "gntinternal.h" |
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
24 #undef GNT_LOG_DOMAIN |
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
25 #define GNT_LOG_DOMAIN "FileSel" |
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
26 |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
27 #include "gntbutton.h" |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
28 #include "gntentry.h" |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
29 #include "gntfilesel.h" |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
30 #include "gntlabel.h" |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
31 #include "gntmarshal.h" |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
32 #include "gntstyle.h" |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
33 #include "gnttree.h" |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
34 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
35 #include <string.h> |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
36 #include <sys/types.h> |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
37 #include <sys/stat.h> |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
38 #include <unistd.h> |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
39 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
40 #if 0 |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
41 #include <glob.h> |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
42 #endif |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
43 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
44 enum |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
45 { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
46 SIG_FILE_SELECTED, |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
47 SIGS |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
48 }; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
49 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
50 static GntWindowClass *parent_class = NULL; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
51 static guint signals[SIGS] = { 0 }; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
52 static void (*orig_map)(GntWidget *widget); |
18200
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
53 static void (*orig_size_request)(GntWidget *widget); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
54 |
18556
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
55 static void select_activated_cb(GntWidget *button, GntFileSel *sel); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
56 |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
57 static void |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
58 gnt_file_sel_destroy(GntWidget *widget) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
59 { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
60 GntFileSel *sel = GNT_FILE_SEL(widget); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
61 g_free(sel->current); |
15936 | 62 g_free(sel->suggest); |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
63 if (sel->tags) { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
64 g_list_foreach(sel->tags, (GFunc)g_free, NULL); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
65 g_list_free(sel->tags); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
66 } |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
67 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
68 |
15992
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
69 #if !GLIB_CHECK_VERSION(2,8,0) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
70 /* ripped from glib/gfileutils.c */ |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
71 static gchar * |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
72 g_build_path_va (const gchar *separator, |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
73 gchar **str_array) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
74 { |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
75 GString *result; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
76 gint separator_len = strlen (separator); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
77 gboolean is_first = TRUE; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
78 gboolean have_leading = FALSE; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
79 const gchar *single_element = NULL; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
80 const gchar *next_element; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
81 const gchar *last_trailing = NULL; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
82 gint i = 0; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
83 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
84 result = g_string_new (NULL); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
85 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
86 next_element = str_array[i++]; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
87 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
88 while (TRUE) { |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
89 const gchar *element; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
90 const gchar *start; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
91 const gchar *end; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
92 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
93 if (next_element) { |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
94 element = next_element; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
95 next_element = str_array[i++]; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
96 } else |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
97 break; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
98 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
99 /* Ignore empty elements */ |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
100 if (!*element) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
101 continue; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
102 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
103 start = element; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
104 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
105 if (separator_len) { |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
106 while (start && |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
107 strncmp (start, separator, separator_len) == 0) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
108 start += separator_len; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
109 } |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
110 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
111 end = start + strlen (start); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
112 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
113 if (separator_len) { |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
114 while (end >= start + separator_len && |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
115 strncmp (end - separator_len, separator, separator_len) == 0) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
116 end -= separator_len; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
117 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
118 last_trailing = end; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
119 while (last_trailing >= element + separator_len && |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
120 strncmp (last_trailing - separator_len, separator, separator_len) == 0) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
121 last_trailing -= separator_len; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
122 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
123 if (!have_leading) { |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
124 /* If the leading and trailing separator strings are in the |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
125 * same element and overlap, the result is exactly that element |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
126 */ |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
127 if (last_trailing <= start) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
128 single_element = element; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
129 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
130 g_string_append_len (result, element, start - element); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
131 have_leading = TRUE; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
132 } else |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
133 single_element = NULL; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
134 } |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
135 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
136 if (end == start) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
137 continue; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
138 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
139 if (!is_first) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
140 g_string_append (result, separator); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
141 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
142 g_string_append_len (result, start, end - start); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
143 is_first = FALSE; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
144 } |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
145 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
146 if (single_element) { |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
147 g_string_free (result, TRUE); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
148 return g_strdup (single_element); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
149 } else { |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
150 if (last_trailing) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
151 g_string_append (result, last_trailing); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
152 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
153 return g_string_free (result, FALSE); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
154 } |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
155 } |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
156 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
157 static gchar * |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
158 g_build_pathv (const gchar *separator, |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
159 gchar **args) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
160 { |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
161 if (!args) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
162 return NULL; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
163 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
164 return g_build_path_va (separator, args); |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
165 } |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
166 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
167 #endif |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
168 |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
169 static char * |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
170 process_path(const char *path) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
171 { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
172 char **splits = NULL; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
173 int i, j; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
174 char *str, *ret; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
175 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
176 splits = g_strsplit(path, G_DIR_SEPARATOR_S, -1); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
177 for (i = 0, j = 0; splits[i]; i++) { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
178 if (strcmp(splits[i], ".") == 0) { |
28336
89644e8d4323
Plug leaks in the file-selector code.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24558
diff
changeset
|
179 g_free(splits[i]); |
89644e8d4323
Plug leaks in the file-selector code.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24558
diff
changeset
|
180 splits[i] = NULL; |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
181 } else if (strcmp(splits[i], "..") == 0) { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
182 if (j) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
183 j--; |
28336
89644e8d4323
Plug leaks in the file-selector code.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24558
diff
changeset
|
184 g_free(splits[i]); |
89644e8d4323
Plug leaks in the file-selector code.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24558
diff
changeset
|
185 splits[i] = NULL; |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
186 } else { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
187 if (i != j) { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
188 g_free(splits[j]); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
189 splits[j] = splits[i]; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
190 splits[i] = NULL; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
191 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
192 j++; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
193 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
194 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
195 g_free(splits[j]); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
196 splits[j] = NULL; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
197 str = g_build_pathv(G_DIR_SEPARATOR_S, splits); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
198 ret = g_strdup_printf(G_DIR_SEPARATOR_S "%s", str); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
199 g_free(str); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
200 g_strfreev(splits); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
201 return ret; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
202 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
203 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
204 static void |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
205 update_location(GntFileSel *sel) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
206 { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
207 char *old; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
208 const char *tmp; |
15936 | 209 tmp = sel->suggest ? sel->suggest : |
210 (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files)); | |
19378
70a3aa1f2dd5
Fix #2599. (Sound File Change Crash)
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18868
diff
changeset
|
211 old = g_strdup_printf("%s%s%s", SAFE(sel->current), SAFE(sel->current)[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : ""); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
212 gnt_entry_set_text(GNT_ENTRY(sel->location), old); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
213 g_free(old); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
214 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
215 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
216 static gboolean |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
217 is_tagged(GntFileSel *sel, const char *f) |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
218 { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
219 char *ret = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", f); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
220 gboolean find = g_list_find_custom(sel->tags, ret, (GCompareFunc)g_utf8_collate) != NULL; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
221 g_free(ret); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
222 return find; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
223 } |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
224 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
225 GntFile* gnt_file_new_dir(const char *name) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
226 { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
227 GntFile *file = g_new0(GntFile, 1); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
228 file->basename = g_strdup(name); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
229 file->type = GNT_FILE_DIR; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
230 return file; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
231 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
232 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
233 GntFile* gnt_file_new(const char *name, unsigned long size) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
234 { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
235 GntFile *file = g_new0(GntFile, 1); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
236 file->basename = g_strdup(name); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
237 file->type = GNT_FILE_REGULAR; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
238 file->size = size; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
239 return file; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
240 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
241 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
242 static gboolean |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
243 local_read_fn(const char *path, GList **files, GError **error) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
244 { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
245 GDir *dir; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
246 GntFile *file; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
247 const char *str; |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28336
diff
changeset
|
248 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
249 dir = g_dir_open(path, 0, error); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
250 if (dir == NULL || (error && *error)) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
251 return FALSE; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
252 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
253 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
254 *files = NULL; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
255 if (*path != '\0' && strcmp(path, G_DIR_SEPARATOR_S)) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
256 file = gnt_file_new_dir(".."); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
257 *files = g_list_prepend(*files, file); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
258 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
259 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
260 while ((str = g_dir_read_name(dir)) != NULL) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
261 char *fp = g_build_filename(path, str, NULL); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
262 struct stat st; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
263 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
264 if (stat(fp, &st)) { |
24558
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
265 gnt_warning("Error stating location %s", fp); |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
266 } else { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
267 if (S_ISDIR(st.st_mode)) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
268 file = gnt_file_new_dir(str); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
269 } else { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
270 file = gnt_file_new(str, (long)st.st_size); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
271 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
272 *files = g_list_prepend(*files, file); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
273 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
274 g_free(fp); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
275 } |
20346
07c2e60026da
applied changes from e9e74094baa29c6f5589385507221a2502b817fb
Luke Schierer <lschiere@pidgin.im>
parents:
19681
diff
changeset
|
276 g_dir_close(dir); |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
277 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
278 *files = g_list_reverse(*files); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
279 return TRUE; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
280 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
281 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
282 static void |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
283 gnt_file_free(GntFile *file) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
284 { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
285 g_free(file->fullpath); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
286 g_free(file->basename); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
287 g_free(file); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
288 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
289 |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
290 static gboolean |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
291 location_changed(GntFileSel *sel, GError **err) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
292 { |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
293 GList *files, *iter; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
294 gboolean success; |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
295 |
15848
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
296 if (!sel->dirs) |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
297 return TRUE; |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
298 |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
299 gnt_tree_remove_all(GNT_TREE(sel->dirs)); |
15848
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
300 if (sel->files) |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
301 gnt_tree_remove_all(GNT_TREE(sel->files)); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
302 gnt_entry_set_text(GNT_ENTRY(sel->location), NULL); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
303 if (sel->current == NULL) { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
304 if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(sel), GNT_WIDGET_MAPPED)) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
305 gnt_widget_draw(GNT_WIDGET(sel)); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
306 return TRUE; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
307 } |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
308 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
309 /* XXX:\ |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
310 * XXX: This is blocking. |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
311 * XXX:/ |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
312 */ |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
313 files = NULL; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
314 if (sel->read_fn) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
315 success = sel->read_fn(sel->current, &files, err); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
316 else |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
317 success = local_read_fn(sel->current, &files, err); |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28336
diff
changeset
|
318 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
319 if (!success || *err) { |
24558
e2e57d3c0578
Use glib log functions to show error messages.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22289
diff
changeset
|
320 gnt_warning("error opening location %s (%s)", |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
321 sel->current, *err ? (*err)->message : "reason unknown"); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
322 return FALSE; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
323 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
324 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
325 for (iter = files; iter; iter = iter->next) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
326 GntFile *file = iter->data; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
327 char *str = file->basename; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
328 if (file->type == GNT_FILE_DIR) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
329 gnt_tree_add_row_after(GNT_TREE(sel->dirs), g_strdup(str), |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
330 gnt_tree_create_row(GNT_TREE(sel->dirs), str), NULL, NULL); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
331 if (sel->multiselect && sel->dirsonly && is_tagged(sel, str)) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
332 gnt_tree_set_row_flags(GNT_TREE(sel->dirs), (gpointer)str, GNT_TEXT_FLAG_BOLD); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
333 } else if (!sel->dirsonly) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
334 char size[128]; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
335 snprintf(size, sizeof(size), "%ld", file->size); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
336 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
337 gnt_tree_add_row_after(GNT_TREE(sel->files), g_strdup(str), |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
338 gnt_tree_create_row(GNT_TREE(sel->files), str, size, ""), NULL, NULL); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
339 if (sel->multiselect && is_tagged(sel, str)) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
340 gnt_tree_set_row_flags(GNT_TREE(sel->files), (gpointer)str, GNT_TEXT_FLAG_BOLD); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
341 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
342 } |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
343 g_list_foreach(files, (GFunc)gnt_file_free, NULL); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
344 g_list_free(files); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
345 if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(sel), GNT_WIDGET_MAPPED)) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
346 gnt_widget_draw(GNT_WIDGET(sel)); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
347 return TRUE; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
348 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
349 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
350 static gboolean |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
351 dir_key_pressed(GntTree *tree, const char *key, GntFileSel *sel) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
352 { |
22289
0ba0f2804299
'\n' (ctrl-j) should behave similar to '\r' (ctrl-m). Fixes #4833.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21284
diff
changeset
|
353 if (strcmp(key, "\r") == 0 || strcmp(key, "\n") == 0) { |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
354 char *str = g_strdup(gnt_tree_get_selection_data(tree)); |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
355 char *path, *dir; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
356 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
357 if (!str) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
358 return TRUE; |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28336
diff
changeset
|
359 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
360 path = g_build_filename(sel->current, str, NULL); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
361 dir = g_path_get_basename(sel->current); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
362 if (!gnt_file_sel_set_current_location(sel, path)) { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
363 gnt_tree_set_selected(tree, str); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
364 } else if (strcmp(str, "..") == 0) { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
365 gnt_tree_set_selected(tree, dir); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
366 } |
18868
d470282d49da
Fix typeahead searching in the file-dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18556
diff
changeset
|
367 gnt_bindable_perform_action_named(GNT_BINDABLE(tree), "end-search", NULL); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
368 g_free(dir); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
369 g_free(str); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
370 g_free(path); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
371 return TRUE; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
372 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
373 return FALSE; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
374 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
375 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
376 static gboolean |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
377 location_key_pressed(GntTree *tree, const char *key, GntFileSel *sel) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
378 { |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
379 char *path; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
380 char *str; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
381 #if 0 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
382 int count; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
383 glob_t gl; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
384 struct stat st; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
385 int glob_ret; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
386 #endif |
22289
0ba0f2804299
'\n' (ctrl-j) should behave similar to '\r' (ctrl-m). Fixes #4833.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21284
diff
changeset
|
387 if (strcmp(key, "\r") && strcmp(key, "\n")) |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
388 return FALSE; |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
389 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
390 str = (char*)gnt_entry_get_text(GNT_ENTRY(sel->location)); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
391 if (*str == G_DIR_SEPARATOR) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
392 path = g_strdup(str); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
393 else |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
394 path = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", sel->current, str); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
395 str = process_path(path); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
396 g_free(path); |
15992
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
397 path = str; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
398 |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
399 if (gnt_file_sel_set_current_location(sel, path)) |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
400 goto success; |
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
401 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
402 path = g_path_get_dirname(str); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
403 g_free(str); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
404 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
405 if (!gnt_file_sel_set_current_location(sel, path)) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
406 g_free(path); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
407 return FALSE; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
408 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
409 #if 0 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
410 /* XXX: there needs to be a way to allow other methods for globbing, |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
411 * like the read_fn stuff. */ |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
412 glob_ret = glob(path, GLOB_MARK, NULL, &gl); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
413 if (!glob_ret) { /* XXX: do something with the return value */ |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
414 char *loc = g_path_get_dirname(gl.gl_pathv[0]); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
415 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
416 stat(gl.gl_pathv[0], &st); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
417 gnt_file_sel_set_current_location(sel, loc); /* XXX: check the return value */ |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
418 g_free(loc); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
419 if (!S_ISDIR(st.st_mode) && !sel->dirsonly) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
420 gnt_tree_remove_all(GNT_TREE(sel->files)); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
421 for (count = 0; count < gl.gl_pathc; count++) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
422 char *tmp = process_path(gl.gl_pathv[count]); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
423 loc = g_path_get_dirname(tmp); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
424 if (g_utf8_collate(sel->current, loc) == 0) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
425 char *base = g_path_get_basename(tmp); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
426 char size[128]; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
427 snprintf(size, sizeof(size), "%ld", (long)st.st_size); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
428 gnt_tree_add_row_after(GNT_TREE(sel->files), base, |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
429 gnt_tree_create_row(GNT_TREE(sel->files), base, size, ""), NULL, NULL); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
430 } |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
431 g_free(loc); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
432 g_free(tmp); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
433 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
434 gnt_widget_draw(sel->files); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
435 } |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
436 } else if (sel->files) { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
437 gnt_tree_remove_all(GNT_TREE(sel->files)); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
438 gnt_widget_draw(sel->files); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
439 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
440 globfree(&gl); |
15992
e78b15c2c60f
"elb: g_build_pathv is Glib 2.8"
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15988
diff
changeset
|
441 #endif |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
442 success: |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
443 g_free(path); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
444 return TRUE; |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
445 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
446 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
447 static void |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
448 file_sel_changed(GntWidget *widget, gpointer old, gpointer current, GntFileSel *sel) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
449 { |
16203
4f6a6443a1e3
emit/handle gnttree signals appropriately
Richard Nelson <wabz@pidgin.im>
parents:
15992
diff
changeset
|
450 if (GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_HAS_FOCUS)) { |
4f6a6443a1e3
emit/handle gnttree signals appropriately
Richard Nelson <wabz@pidgin.im>
parents:
15992
diff
changeset
|
451 g_free(sel->suggest); |
4f6a6443a1e3
emit/handle gnttree signals appropriately
Richard Nelson <wabz@pidgin.im>
parents:
15992
diff
changeset
|
452 sel->suggest = NULL; |
4f6a6443a1e3
emit/handle gnttree signals appropriately
Richard Nelson <wabz@pidgin.im>
parents:
15992
diff
changeset
|
453 update_location(sel); |
4f6a6443a1e3
emit/handle gnttree signals appropriately
Richard Nelson <wabz@pidgin.im>
parents:
15992
diff
changeset
|
454 } |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
455 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
456 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
457 static void |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
458 gnt_file_sel_map(GntWidget *widget) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
459 { |
15848
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
460 GntFileSel *sel = GNT_FILE_SEL(widget); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
461 GntWidget *hbox, *vbox; |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
462 |
18434 | 463 if (sel->current == NULL) |
464 gnt_file_sel_set_current_location(sel, g_get_home_dir()); | |
465 | |
15848
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
466 vbox = gnt_vbox_new(FALSE); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
467 gnt_box_set_pad(GNT_BOX(vbox), 0); |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
468 gnt_box_set_alignment(GNT_BOX(vbox), GNT_ALIGN_MID); |
15848
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
469 |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
470 /* The dir. and files list */ |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
471 hbox = gnt_hbox_new(FALSE); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
472 gnt_box_set_pad(GNT_BOX(hbox), 0); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
473 |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
474 gnt_box_add_widget(GNT_BOX(hbox), sel->dirs); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
475 |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
476 if (!sel->dirsonly) { |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
477 gnt_box_add_widget(GNT_BOX(hbox), sel->files); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
478 } else { |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
479 g_signal_connect(G_OBJECT(sel->dirs), "selection_changed", G_CALLBACK(file_sel_changed), sel); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
480 } |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
481 |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
482 gnt_box_add_widget(GNT_BOX(vbox), hbox); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
483 gnt_box_add_widget(GNT_BOX(vbox), sel->location); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
484 |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
485 /* The buttons */ |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
486 hbox = gnt_hbox_new(FALSE); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
487 gnt_box_add_widget(GNT_BOX(hbox), sel->cancel); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
488 gnt_box_add_widget(GNT_BOX(hbox), sel->select); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
489 gnt_box_add_widget(GNT_BOX(vbox), hbox); |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
490 |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
491 gnt_box_add_widget(GNT_BOX(sel), vbox); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
492 orig_map(widget); |
15848
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
493 update_location(sel); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
494 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
495 |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
496 static gboolean |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
497 toggle_tag_selection(GntBindable *bind, GList *null) |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
498 { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
499 GntFileSel *sel = GNT_FILE_SEL(bind); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
500 char *str; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
501 GList *find; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
502 char *file; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
503 GntWidget *tree; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
504 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
505 if (!sel->multiselect) |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
506 return FALSE; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
507 tree = sel->dirsonly ? sel->dirs : sel->files; |
18868
d470282d49da
Fix typeahead searching in the file-dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18556
diff
changeset
|
508 if (!gnt_widget_has_focus(tree) || |
d470282d49da
Fix typeahead searching in the file-dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18556
diff
changeset
|
509 gnt_tree_is_searching(GNT_TREE(tree))) |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
510 return FALSE; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
511 |
18868
d470282d49da
Fix typeahead searching in the file-dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18556
diff
changeset
|
512 file = gnt_tree_get_selection_data(GNT_TREE(tree)); |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
513 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
514 str = gnt_file_sel_get_selected_file(sel); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
515 if ((find = g_list_find_custom(sel->tags, str, (GCompareFunc)g_utf8_collate)) != NULL) { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
516 g_free(find->data); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
517 sel->tags = g_list_delete_link(sel->tags, find); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
518 gnt_tree_set_row_flags(GNT_TREE(tree), file, GNT_TEXT_FLAG_NORMAL); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
519 g_free(str); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
520 } else { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
521 sel->tags = g_list_prepend(sel->tags, str); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
522 gnt_tree_set_row_flags(GNT_TREE(tree), file, GNT_TEXT_FLAG_BOLD); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
523 } |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
524 |
15952
0ef26ac647ac
move to the next entry after (un)tagging an item.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15936
diff
changeset
|
525 gnt_bindable_perform_action_named(GNT_BINDABLE(tree), "move-down", NULL); |
0ef26ac647ac
move to the next entry after (un)tagging an item.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15936
diff
changeset
|
526 |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
527 return TRUE; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
528 } |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
529 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
530 static gboolean |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
531 clear_tags(GntBindable *bind, GList *null) |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
532 { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
533 GntFileSel *sel = GNT_FILE_SEL(bind); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
534 GntWidget *tree; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
535 GList *iter; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
536 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
537 if (!sel->multiselect) |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
538 return FALSE; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
539 tree = sel->dirsonly ? sel->dirs : sel->files; |
18868
d470282d49da
Fix typeahead searching in the file-dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18556
diff
changeset
|
540 if (!gnt_widget_has_focus(tree) || |
d470282d49da
Fix typeahead searching in the file-dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18556
diff
changeset
|
541 gnt_tree_is_searching(GNT_TREE(tree))) |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
542 return FALSE; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
543 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
544 g_list_foreach(sel->tags, (GFunc)g_free, NULL); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
545 g_list_free(sel->tags); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
546 sel->tags = NULL; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
547 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
548 for (iter = GNT_TREE(tree)->list; iter; iter = iter->next) |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
549 gnt_tree_set_row_flags(GNT_TREE(tree), iter->data, GNT_TEXT_FLAG_NORMAL); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
550 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
551 return TRUE; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
552 } |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
553 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
554 static gboolean |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
555 up_directory(GntBindable *bind, GList *null) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
556 { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
557 char *path, *dir; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
558 GntFileSel *sel = GNT_FILE_SEL(bind); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
559 if (!gnt_widget_has_focus(sel->dirs) && |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
560 !gnt_widget_has_focus(sel->files)) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
561 return FALSE; |
18868
d470282d49da
Fix typeahead searching in the file-dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18556
diff
changeset
|
562 if (gnt_tree_is_searching(GNT_TREE(sel->dirs)) || |
d470282d49da
Fix typeahead searching in the file-dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18556
diff
changeset
|
563 gnt_tree_is_searching(GNT_TREE(sel->files))) |
d470282d49da
Fix typeahead searching in the file-dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18556
diff
changeset
|
564 return FALSE; |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
565 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
566 path = g_build_filename(sel->current, "..", NULL); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
567 dir = g_path_get_basename(sel->current); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
568 if (gnt_file_sel_set_current_location(sel, path)) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
569 gnt_tree_set_selected(GNT_TREE(sel->dirs), dir); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
570 g_free(dir); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
571 g_free(path); |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
572 return TRUE; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
573 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
574 |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
575 static void |
18200
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
576 gnt_file_sel_size_request(GntWidget *widget) |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
577 { |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
578 GntFileSel *sel; |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
579 if (widget->priv.height > 0) |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
580 return; |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
581 |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
582 sel = GNT_FILE_SEL(widget); |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
583 sel->dirs->priv.height = 16; |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
584 sel->files->priv.height = 16; |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
585 orig_size_request(widget); |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
586 } |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
587 |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
588 static void |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
589 gnt_file_sel_class_init(GntFileSelClass *klass) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
590 { |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
591 GntBindableClass *bindable = GNT_BINDABLE_CLASS(klass); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
592 GntWidgetClass *kl = GNT_WIDGET_CLASS(klass); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
593 parent_class = GNT_WINDOW_CLASS(klass); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
594 kl->destroy = gnt_file_sel_destroy; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
595 orig_map = kl->map; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
596 kl->map = gnt_file_sel_map; |
18200
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
597 orig_size_request = kl->size_request; |
4ea95c55e771
The file-selector needs to be a bit taller.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17928
diff
changeset
|
598 kl->size_request = gnt_file_sel_size_request; |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
599 |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28336
diff
changeset
|
600 signals[SIG_FILE_SELECTED] = |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
601 g_signal_new("file_selected", |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
602 G_TYPE_FROM_CLASS(klass), |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
603 G_SIGNAL_RUN_LAST, |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
604 G_STRUCT_OFFSET(GntFileSelClass, file_selected), |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
605 NULL, NULL, |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
606 gnt_closure_marshal_VOID__STRING_STRING, |
18451
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
607 G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING); |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
608 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
609 gnt_bindable_class_register_action(bindable, "toggle-tag", toggle_tag_selection, "t", NULL); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
610 gnt_bindable_class_register_action(bindable, "clear-tags", clear_tags, "c", NULL); |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
611 gnt_bindable_class_register_action(bindable, "up-directory", up_directory, GNT_KEY_BACKSPACE, NULL); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
612 gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass)); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
613 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
614 GNTDEBUG; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
615 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
616 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
617 static void |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
618 gnt_file_sel_init(GTypeInstance *instance, gpointer class) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
619 { |
18556
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
620 GntFileSel *sel = GNT_FILE_SEL(instance); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
621 |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
622 sel->dirs = gnt_tree_new(); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
623 gnt_tree_set_compare_func(GNT_TREE(sel->dirs), (GCompareFunc)g_utf8_collate); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
624 gnt_tree_set_hash_fns(GNT_TREE(sel->dirs), g_str_hash, g_str_equal, g_free); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
625 gnt_tree_set_column_titles(GNT_TREE(sel->dirs), "Directories"); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
626 gnt_tree_set_show_title(GNT_TREE(sel->dirs), TRUE); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
627 gnt_tree_set_col_width(GNT_TREE(sel->dirs), 0, 20); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
628 g_signal_connect(G_OBJECT(sel->dirs), "key_pressed", G_CALLBACK(dir_key_pressed), sel); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
629 |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
630 sel->files = gnt_tree_new_with_columns(2); /* Name, Size */ |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
631 gnt_tree_set_compare_func(GNT_TREE(sel->files), (GCompareFunc)g_utf8_collate); |
28336
89644e8d4323
Plug leaks in the file-selector code.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24558
diff
changeset
|
632 gnt_tree_set_hash_fns(GNT_TREE(sel->files), g_str_hash, g_str_equal, g_free); |
18556
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
633 gnt_tree_set_column_titles(GNT_TREE(sel->files), "Filename", "Size"); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
634 gnt_tree_set_show_title(GNT_TREE(sel->files), TRUE); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
635 gnt_tree_set_col_width(GNT_TREE(sel->files), 0, 25); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
636 gnt_tree_set_col_width(GNT_TREE(sel->files), 1, 10); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
637 gnt_tree_set_column_is_right_aligned(GNT_TREE(sel->files), 1, TRUE); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
638 g_signal_connect(G_OBJECT(sel->files), "selection_changed", G_CALLBACK(file_sel_changed), sel); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
639 |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
640 /* The location entry */ |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
641 sel->location = gnt_entry_new(NULL); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
642 g_signal_connect(G_OBJECT(sel->location), "key_pressed", G_CALLBACK(location_key_pressed), sel); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
643 |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
644 sel->cancel = gnt_button_new("Cancel"); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
645 sel->select = gnt_button_new("Select"); |
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
646 |
21277
cd494bf77723
Hitting enter on a file will trigger the 'select' button in the file selector dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21253
diff
changeset
|
647 g_signal_connect_swapped(G_OBJECT(sel->files), "activate", G_CALLBACK(gnt_widget_activate), sel->select); |
18556
5e1412f4e67a
Do some work to make pygnt more useful. The dbus-gnt script works fairly
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18451
diff
changeset
|
648 g_signal_connect(G_OBJECT(sel->select), "activate", G_CALLBACK(select_activated_cb), sel); |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
649 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
650 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
651 /****************************************************************************** |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
652 * GntFileSel API |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
653 *****************************************************************************/ |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
654 GType |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
655 gnt_file_sel_get_gtype(void) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
656 { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
657 static GType type = 0; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
658 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
659 if(type == 0) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
660 { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
661 static const GTypeInfo info = { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
662 sizeof(GntFileSelClass), |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
663 NULL, /* base_init */ |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
664 NULL, /* base_finalize */ |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
665 (GClassInitFunc)gnt_file_sel_class_init, |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
666 NULL, /* class_finalize */ |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
667 NULL, /* class_data */ |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
668 sizeof(GntFileSel), |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
669 0, /* n_preallocs */ |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
670 gnt_file_sel_init, /* instance_init */ |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
671 NULL |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
672 }; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
673 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
674 type = g_type_register_static(GNT_TYPE_WINDOW, |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
675 "GntFileSel", |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
676 &info, 0); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
677 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
678 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
679 return type; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
680 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
681 |
18451
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
682 static void |
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
683 select_activated_cb(GntWidget *button, GntFileSel *sel) |
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
684 { |
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
685 char *path = gnt_file_sel_get_selected_file(sel); |
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
686 char *file = g_path_get_basename(path); |
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
687 g_signal_emit(sel, signals[SIG_FILE_SELECTED], 0, path, file); |
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
688 g_free(file); |
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
689 g_free(path); |
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
690 } |
7122bcebf7c9
Since we have the file-selected signal, we might as well emit it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18449
diff
changeset
|
691 |
15909
0592a7b4db86
This was giving me a warning saying the function wasn't previously declared
Mark Doliner <mark@kingant.net>
parents:
15848
diff
changeset
|
692 GntWidget *gnt_file_sel_new(void) |
15846
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
693 { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
694 GntWidget *widget = g_object_new(GNT_TYPE_FILE_SEL, NULL); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
695 return widget; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
696 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
697 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
698 gboolean gnt_file_sel_set_current_location(GntFileSel *sel, const char *path) |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
699 { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
700 char *old; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
701 GError *error = NULL; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
702 gboolean ret = TRUE; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
703 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
704 old = sel->current; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
705 sel->current = process_path(path); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
706 if (!location_changed(sel, &error)) { |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
707 g_error_free(error); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
708 error = NULL; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
709 g_free(sel->current); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
710 sel->current = old; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
711 location_changed(sel, &error); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
712 ret = FALSE; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
713 } else |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
714 g_free(old); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
715 |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
716 update_location(sel); |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
717 return ret; |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
718 } |
a2ab257116ce
File selector dialog. Still in an experimental state. When properly complete, this can be used for file/folder-request etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
719 |
15848
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
720 void gnt_file_sel_set_dirs_only(GntFileSel *sel, gboolean dirs) |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
721 { |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
722 sel->dirsonly = dirs; |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
723 } |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
724 |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
725 gboolean gnt_file_sel_get_dirs_only(GntFileSel *sel) |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
726 { |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
727 return sel->dirsonly; |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
728 } |
3da9d5da9054
Directory only selection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15846
diff
changeset
|
729 |
15936 | 730 void gnt_file_sel_set_suggested_filename(GntFileSel *sel, const char *suggest) |
731 { | |
21161
e119edfc0fb0
applied changes from 172a59b41412c4630834d66f2e7ec3be970cc36b
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20346
diff
changeset
|
732 g_free(sel->suggest); |
15936 | 733 sel->suggest = g_strdup(suggest); |
734 } | |
735 | |
15849
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
736 char *gnt_file_sel_get_selected_file(GntFileSel *sel) |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
737 { |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
738 char *ret; |
15936 | 739 if (sel->dirsonly) { |
15964 | 740 ret = g_path_get_dirname(gnt_entry_get_text(GNT_ENTRY(sel->location))); |
15936 | 741 } else { |
742 ret = g_strdup(gnt_entry_get_text(GNT_ENTRY(sel->location))); | |
743 } | |
15849
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
744 return ret; |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
745 } |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
746 |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
747 void gnt_file_sel_set_must_exist(GntFileSel *sel, gboolean must) |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
748 { |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
749 /*XXX: What do I do with this? */ |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
750 sel->must_exist = must; |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
751 } |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
752 |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
753 gboolean gnt_file_sel_get_must_exist(GntFileSel *sel) |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
754 { |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
755 return sel->must_exist; |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
756 } |
65b45106bfbb
Use the file selector for request-file.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15848
diff
changeset
|
757 |
15923
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
758 void gnt_file_sel_set_multi_select(GntFileSel *sel, gboolean set) |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
759 { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
760 sel->multiselect = set; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
761 } |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
762 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
763 GList *gnt_file_sel_get_selected_multi_files(GntFileSel *sel) |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
764 { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
765 GList *list = NULL, *iter; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
766 char *str = gnt_file_sel_get_selected_file(sel); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
767 |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
768 for (iter = sel->tags; iter; iter = iter->next) { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
769 list = g_list_prepend(list, g_strdup(iter->data)); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
770 if (g_utf8_collate(str, iter->data)) { |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
771 g_free(str); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
772 str = NULL; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
773 } |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
774 } |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
775 if (str) |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
776 list = g_list_prepend(list, str); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
777 list = g_list_reverse(list); |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
778 return list; |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
779 } |
f8c16848b76d
Allow selecting multiple files from the file-select dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15922
diff
changeset
|
780 |
15988
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
781 void gnt_file_sel_set_read_fn(GntFileSel *sel, gboolean (*read_fn)(const char *path, GList **files, GError **error)) |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
782 { |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
783 sel->read_fn = read_fn; |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
784 } |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
785 |
e05e5b148723
Allow using different methods for reading directory entries.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15964
diff
changeset
|
786 |