summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@ximian.com>2005-10-19 16:25:42 +0000
committerFederico Mena Quintero <federico@src.gnome.org>2005-10-19 16:25:42 +0000
commit647ba5b40dae93627846cc7ad3d077a8109d04b8 (patch)
treee543ad9ca4bf72aad0d519904994d3eaf93393d4
parentfcacded8ff3a23560feba04199005f81aa6a8a74 (diff)
downloadgtk+-647ba5b40dae93627846cc7ad3d077a8109d04b8.tar.gz
Fixes bug #317999:
2005-10-18 Federico Mena Quintero <federico@ximian.com> Fixes bug #317999: * tests/autotestfilechooser.c (test_button_folder_states_for_action): Test that we have either $cwd or the explicitly-set folder. (test_reload_sequence): Likewise. * gtk/gtkfilechooserdefault.c (gtk_file_chooser_default_get_current_folder): If our reload_state is RELOAD_EMPTY, return a GtkFilePath corresponding to $cwd.
-rw-r--r--ChangeLog13
-rw-r--r--ChangeLog.pre-2-1013
-rw-r--r--gtk/gtkfilechooserdefault.c17
-rw-r--r--tests/autotestfilechooser.c155
4 files changed, 134 insertions, 64 deletions
diff --git a/ChangeLog b/ChangeLog
index 56abba5c28..2e182a8fad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2005-10-18 Federico Mena Quintero <federico@ximian.com>
+
+ Fixes bug #317999:
+
+ * tests/autotestfilechooser.c
+ (test_button_folder_states_for_action): Test that we have either
+ $cwd or the explicitly-set folder.
+ (test_reload_sequence): Likewise.
+
+ * gtk/gtkfilechooserdefault.c
+ (gtk_file_chooser_default_get_current_folder): If our reload_state
+ is RELOAD_EMPTY, return a GtkFilePath corresponding to $cwd.
+
2005-10-14 Tor Lillqvist <tml@novell.com>
* gdk/win32/gdkdisplay-win32.c: Remove the clipboard viewer code.
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 56abba5c28..2e182a8fad 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,16 @@
+2005-10-18 Federico Mena Quintero <federico@ximian.com>
+
+ Fixes bug #317999:
+
+ * tests/autotestfilechooser.c
+ (test_button_folder_states_for_action): Test that we have either
+ $cwd or the explicitly-set folder.
+ (test_reload_sequence): Likewise.
+
+ * gtk/gtkfilechooserdefault.c
+ (gtk_file_chooser_default_get_current_folder): If our reload_state
+ is RELOAD_EMPTY, return a GtkFilePath corresponding to $cwd.
+
2005-10-14 Tor Lillqvist <tml@novell.com>
* gdk/win32/gdkdisplay-win32.c: Remove the clipboard viewer code.
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index dc1649462b..6eb561667b 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -86,7 +86,7 @@
#endif
/* Profiling stuff */
-#undef PROFILE_FILE_CHOOSER
+#define PROFILE_FILE_CHOOSER
#ifdef PROFILE_FILE_CHOOSER
@@ -5415,6 +5415,21 @@ gtk_file_chooser_default_get_current_folder (GtkFileChooser *chooser)
{
GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser);
+ if (impl->reload_state == RELOAD_EMPTY)
+ {
+ char *current_working_dir;
+ GtkFilePath *path;
+
+ /* We are unmapped, or we had an error while loading the last folder. We'll return
+ * the $cwd since once we get (re)mapped, we'll load $cwd anyway unless the caller
+ * explicitly calls set_current_folder() on us.
+ */
+ current_working_dir = g_get_current_dir ();
+ path = gtk_file_system_filename_to_path (impl->file_system, current_working_dir);
+ g_free (current_working_dir);
+ return path;
+ }
+
return gtk_file_path_copy (impl->current_folder);
}
diff --git a/tests/autotestfilechooser.c b/tests/autotestfilechooser.c
index 0dadc1a18f..aa76d2ae40 100644
--- a/tests/autotestfilechooser.c
+++ b/tests/autotestfilechooser.c
@@ -282,9 +282,12 @@ test_reload_sequence (gboolean set_folder_before_map)
GtkFileChooserDefault *impl;
gboolean passed;
char *folder;
+ char *current_working_dir;
passed = TRUE;
+ current_working_dir = g_get_current_dir ();
+
dialog = gtk_file_chooser_dialog_new ("Test file chooser",
NULL,
GTK_FILE_CHOOSER_ACTION_OPEN,
@@ -299,14 +302,14 @@ test_reload_sequence (gboolean set_folder_before_map)
{
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_get_home_dir ());
- passed = (impl->current_folder != NULL
- && impl->browse_files_model != NULL
- && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- && impl->reload_state == RELOAD_HAS_FOLDER
- && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
- && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
- : TRUE));
+ passed = passed && (impl->current_folder != NULL
+ && impl->browse_files_model != NULL
+ && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
+ && impl->reload_state == RELOAD_HAS_FOLDER
+ && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
+ && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
+ ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
+ : TRUE));
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0);
@@ -323,79 +326,83 @@ test_reload_sequence (gboolean set_folder_before_map)
&& impl->load_timeout_id == 0);
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
- passed = passed && (folder == NULL);
+ passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0);
}
log_test (passed, "test_reload_sequence(): initial status");
- if (!passed)
- return FALSE;
/* After mapping, it is loading some folder, either the one that was explicitly set or the default one */
gtk_widget_show_now (dialog);
- passed = (impl->current_folder != NULL
- && impl->browse_files_model != NULL
- && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- && impl->reload_state == RELOAD_HAS_FOLDER
- && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
- && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
- : TRUE));
+ passed = passed && (impl->current_folder != NULL
+ && impl->browse_files_model != NULL
+ && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
+ && impl->reload_state == RELOAD_HAS_FOLDER
+ && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
+ && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
+ ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
+ : TRUE));
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
- passed = passed && (folder != NULL);
+ if (set_folder_before_map)
+ passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0);
+ else
+ passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0);
+
g_free (folder);
log_test (passed, "test_reload_sequence(): status after map");
- if (!passed)
- return FALSE;
/* Unmap it; we should still have a folder */
gtk_widget_hide (dialog);
- passed = (impl->current_folder != NULL
- && impl->browse_files_model != NULL
- && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- && impl->reload_state == RELOAD_WAS_UNMAPPED
- && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
- && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
- : TRUE));
- if (!passed)
- return FALSE;
+ passed = passed && (impl->current_folder != NULL
+ && impl->browse_files_model != NULL
+ && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
+ && impl->reload_state == RELOAD_WAS_UNMAPPED
+ && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
+ && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
+ ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
+ : TRUE));
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
- passed = passed && (folder != NULL);
+ if (set_folder_before_map)
+ passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0);
+ else
+ passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0);
+
g_free (folder);
log_test (passed, "test_reload_sequence(): status after unmap");
- if (!passed)
- return FALSE;
/* Map it again! */
gtk_widget_show_now (dialog);
-
- passed = (impl->current_folder != NULL
- && impl->browse_files_model != NULL
- && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- && impl->reload_state == RELOAD_HAS_FOLDER
- && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
- && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
- ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
- : TRUE));
- if (!passed)
- return FALSE;
+
+ passed = passed && (impl->current_folder != NULL
+ && impl->browse_files_model != NULL
+ && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
+ && impl->reload_state == RELOAD_HAS_FOLDER
+ && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE)
+ && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED)
+ ? (impl->load_timeout_id == 0 && impl->sort_model != NULL)
+ : TRUE));
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
- passed = passed && (folder != NULL);
+ if (set_folder_before_map)
+ passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0);
+ else
+ passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0);
+
g_free (folder);
log_test (passed, "test_reload_sequence(): status after re-map");
gtk_widget_destroy (dialog);
+ g_free (current_working_dir);
+
return passed;
}
@@ -422,14 +429,16 @@ test_button_folder_states_for_action (GtkFileChooserAction action, gboolean use_
GtkWidget *window;
GtkWidget *button;
char *folder;
- gboolean must_have_folder_initially;
GtkWidget *dialog;
+ char *current_working_dir;
+ gboolean must_have_cwd;
passed = TRUE;
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ current_working_dir = g_get_current_dir ();
+ must_have_cwd = !(use_dialog && set_folder_on_dialog);
- must_have_folder_initially = (use_dialog && set_folder_on_dialog);
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
if (use_dialog)
{
@@ -453,51 +462,71 @@ test_button_folder_states_for_action (GtkFileChooserAction action, gboolean use_
/* Pre-map; no folder is set */
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button));
- if (must_have_folder_initially)
- passed = passed && (folder != NULL);
+ if (must_have_cwd)
+ passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0);
else
- passed = passed && (folder == NULL);
+ passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0);
log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, pre-map, %s",
get_action_name (action),
use_dialog,
set_folder_on_dialog,
- must_have_folder_initially ? "must have folder" : "folder must not be set");
+ must_have_cwd ? "must have $cwd" : "must have explicit folder");
/* Map; folder should be set */
gtk_widget_show_all (window);
gtk_widget_show_now (window);
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button));
- passed = passed && (folder != NULL);
- log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, mapped, must have folder",
+
+ if (must_have_cwd)
+ passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0);
+ else
+ passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0);
+
+ log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, mapped, %s",
get_action_name (action),
use_dialog,
- set_folder_on_dialog);
+ set_folder_on_dialog,
+ must_have_cwd ? "must have $cwd" : "must have explicit folder");
g_free (folder);
/* Unmap; folder should be set */
gtk_widget_hide (window);
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button));
- passed = passed && (folder != NULL);
- log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, unmapped, must have folder",
+
+ if (must_have_cwd)
+ passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0);
+ else
+ passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0);
+
+ log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, unmapped, %s",
get_action_name (action),
use_dialog,
- set_folder_on_dialog);
+ set_folder_on_dialog,
+ must_have_cwd ? "must have $cwd" : "must have explicit folder");
g_free (folder);
/* Re-map; folder should be set */
gtk_widget_show_now (window);
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button));
- passed = passed && (folder != NULL);
- log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, re-mapped, must have folder",
+
+ if (must_have_cwd)
+ passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0);
+ else
+ passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0);
+
+ log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, re-mapped, %s",
get_action_name (action),
use_dialog,
- set_folder_on_dialog);
+ set_folder_on_dialog,
+ must_have_cwd ? "must have $cwd" : "must have explicit folder");
g_free (folder);
+ g_free (current_working_dir);
+
gtk_widget_destroy (window);
return passed;