summaryrefslogtreecommitdiff
path: root/gtk/gtkfilesel.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@src.gnome.org>2000-03-14 19:57:25 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-03-14 19:57:25 +0000
commit10ba4fd066042b4335ae45e7560565872f71ba9b (patch)
tree17f68ffb0d402b6e66bb891d4a7d9a02a9b6108b /gtk/gtkfilesel.c
parent3f98a849c70ae570b78095cef0152a33ec07c64e (diff)
downloadgdk-pixbuf-10ba4fd066042b4335ae45e7560565872f71ba9b.tar.gz
Merges from gtk-1-2
Diffstat (limited to 'gtk/gtkfilesel.c')
-rw-r--r--gtk/gtkfilesel.c53
1 files changed, 39 insertions, 14 deletions
diff --git a/gtk/gtkfilesel.c b/gtk/gtkfilesel.c
index f39b9d763..11d85c3f0 100644
--- a/gtk/gtkfilesel.c
+++ b/gtk/gtkfilesel.c
@@ -1998,20 +1998,6 @@ open_ref_dir(gchar* text_to_complete,
if (FALSE)
;
#endif
- else if (g_path_is_absolute (text_to_complete) || !cmpl_state->reference_dir)
- {
- char *root;
- int rootlen;
-
- rootlen = g_path_skip_root (text_to_complete) - text_to_complete;
- root = g_malloc (rootlen + 1);
- memcpy (root, text_to_complete, rootlen);
- root[rootlen] = '\0';
- new_dir = open_dir (root, cmpl_state);
- if (new_dir)
- *remaining_text = g_path_skip_root (text_to_complete);
- g_free (root);
- }
#ifdef HAVE_PWD_H
else if (text_to_complete[0] == '~')
{
@@ -2030,6 +2016,45 @@ open_ref_dir(gchar* text_to_complete,
}
}
#endif
+ else if (g_path_is_absolute (text_to_complete) || !cmpl_state->reference_dir)
+ {
+ gchar *tmp = g_strdup(text_to_complete);
+ gchar *p;
+
+ p = tmp;
+ while (*p && *p != '*' && *p != '?')
+ p++;
+
+ *p = '\0';
+ p = strrchr(tmp, G_DIR_SEPARATOR);
+ if (p)
+ {
+ if (p == tmp)
+ p++;
+
+ *p = '\0';
+
+ new_dir = open_dir(tmp, cmpl_state);
+
+ if(new_dir)
+ *remaining_text = text_to_complete +
+ ((p == tmp + 1) ? (p - tmp) : (p + 1 - tmp));
+ }
+ else
+ {
+ /* If no possible candidates, use the cwd */
+ gchar *curdir = g_get_current_dir ();
+
+ new_dir = open_dir(curdir, cmpl_state);
+
+ if (new_dir)
+ *remaining_text = text_to_complete;
+
+ g_free (curdir);
+ }
+
+ g_free (tmp);
+ }
else
{
*remaining_text = text_to_complete;