diff options
author | Owen Taylor <otaylor@src.gnome.org> | 2000-03-14 19:57:25 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2000-03-14 19:57:25 +0000 |
commit | 10ba4fd066042b4335ae45e7560565872f71ba9b (patch) | |
tree | 17f68ffb0d402b6e66bb891d4a7d9a02a9b6108b /gtk/gtkfilesel.c | |
parent | 3f98a849c70ae570b78095cef0152a33ec07c64e (diff) | |
download | gdk-pixbuf-10ba4fd066042b4335ae45e7560565872f71ba9b.tar.gz |
Merges from gtk-1-2
Diffstat (limited to 'gtk/gtkfilesel.c')
-rw-r--r-- | gtk/gtkfilesel.c | 53 |
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; |