diff options
author | Gilbert Ramirez <gram@alumni.rice.edu> | 2001-04-09 22:35:23 +0000 |
---|---|---|
committer | Gilbert Ramirez <gram@alumni.rice.edu> | 2001-04-09 22:35:23 +0000 |
commit | 8ea93329a8d39324e50499a9843daf604715f2ee (patch) | |
tree | 407cfc5504c65cccd9942649304d5542b82b6e28 /gtk | |
parent | e7fed6d68b19733cd7dbb2a9aabf71dc8c04b7e4 (diff) |
last_open_dir needs a trailing slash in order for the GTK+
file-selection dialogue to open the directory and show its
contents, otherwise it opens the parent directory and shows *its*
contents.
svn path=/trunk/; revision=3279
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/file_dlg.c | 31 | ||||
-rw-r--r-- | gtk/main.c | 25 | ||||
-rw-r--r-- | gtk/main.h | 3 |
3 files changed, 31 insertions, 28 deletions
diff --git a/gtk/file_dlg.c b/gtk/file_dlg.c index fab7d1f42d..e6c2732dc4 100644 --- a/gtk/file_dlg.c +++ b/gtk/file_dlg.c @@ -1,7 +1,7 @@ /* file_dlg.c * Dialog boxes for handling files * - * $Id: file_dlg.c,v 1.36 2001/02/01 20:21:21 gram Exp $ + * $Id: file_dlg.c,v 1.37 2001/04/09 22:35:23 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -48,6 +48,7 @@ #include "file_dlg.h" #include "dlg_utils.h" #include "util.h" +#include "main.h" static void file_open_ok_cb(GtkWidget *w, GtkFileSelection *fs); static void file_open_destroy_cb(GtkWidget *win, gpointer user_data); @@ -92,7 +93,7 @@ file_open_cmd_cb(GtkWidget *w, gpointer data) /* If we've opened a file, start out by showing the files in the directory in which that file resided. */ if (last_open_dir) - gtk_file_selection_complete(GTK_FILE_SELECTION(file_open_w), last_open_dir); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(file_open_w), last_open_dir); resolv_cb = dlg_check_button_new_with_label_with_mnemonic( "Enable name resolution", NULL); @@ -165,9 +166,8 @@ file_open_ok_cb(GtkWidget *w, GtkFileSelection *fs) { if (test_for_directory(cf_name) == EISDIR) { /* It's a directory - set the file selection box to display that directory, don't try to open the directory as a capture file. */ - g_free(last_open_dir); - last_open_dir = cf_name; - gtk_file_selection_complete(GTK_FILE_SELECTION(fs), last_open_dir); + set_last_open_dir(cf_name); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(fs), last_open_dir); return; } @@ -218,24 +218,7 @@ file_open_ok_cb(GtkWidget *w, GtkFileSelection *fs) { if any; we can write over cf_name, which is a good thing, given that "get_dirname()" does write over its argument. */ s = get_dirname(cf_name); - if (s != NULL) { - /* Well, there is a directory in there... */ - if (last_open_dir != NULL) { - /* ...and we already have one saved... */ - if (strcmp(last_open_dir, s) != 0) { - /* ...and it's not the same as this one, so free the old one - and assign a copy of the new one to it. */ - g_free(last_open_dir); - last_open_dir = g_strdup(s); - } - } else { - /* ...and we don't already have one saved, so just save this one. */ - last_open_dir = g_strdup(s); - } - } else { - /* There was no directory in there. */ - last_open_dir = NULL; - } + set_last_open_dir(s); g_free(cf_name); } @@ -418,7 +401,7 @@ file_save_as_cmd_cb(GtkWidget *w, gpointer data) /* If we've opened a file, start out by showing the files in the directory in which that file resided. */ if (last_open_dir) - gtk_file_selection_complete(GTK_FILE_SELECTION(file_save_as_w), last_open_dir); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(file_save_as_w), last_open_dir); /* Connect the ok_button to file_save_as_ok_cb function and pass along a pointer to the file selection box widget */ diff --git a/gtk/main.c b/gtk/main.c index 7ede84453f..8730a569cd 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1,6 +1,6 @@ /* main.c * - * $Id: main.c,v 1.189 2001/04/05 05:58:05 gram Exp $ + * $Id: main.c,v 1.190 2001/04/09 22:35:23 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -1287,8 +1287,7 @@ main(int argc, char *argv[]) good thing, given that "get_dirname()" does write over its argument. */ s = get_dirname(cf_name); - if (s != NULL) - last_open_dir = s; + set_last_open_dir(s); } else { if (rfcode != NULL) dfilter_free(rfcode); @@ -1690,3 +1689,23 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs) gtk_widget_show(top_level); } + +void +set_last_open_dir(char *dirname) +{ + int len; + + if (last_open_dir) { + g_free(last_open_dir); + } + + if (dirname) { + len = strlen(dirname); + if (dirname[len-1] != '/') { + last_open_dir = g_strconcat(dirname, "/", NULL); + } + } + else { + last_open_dir = NULL; + } +} diff --git a/gtk/main.h b/gtk/main.h index ab1a49b14e..d9c845b177 100644 --- a/gtk/main.h +++ b/gtk/main.h @@ -1,7 +1,7 @@ /* main.h * Global defines, etc. * - * $Id: main.h,v 1.21 2001/03/02 23:10:12 gram Exp $ + * $Id: main.h,v 1.22 2001/04/09 22:35:23 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -65,5 +65,6 @@ void update_marked_frames(void); char *boldify(const char *); void set_fonts(GdkFont *regular, GdkFont *bold); +void set_last_open_dir(char *dirname); #endif /* __MAIN_H__ */ |