diff --git a/ChangeLog b/ChangeLog index 86162591a5..42646f5c9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2005-07-07 Matthias Clasen + + Fix #157787, reported by Jonathan Blandford: + + * gtk/gtkfilechooserdefault.c + (gtk_file_chooser_default_set_current_folder): Don't leave a + "trail" behind when set_current_folder is called explicitly. + (gtk_file_chooser_default_update_current_folder): New function + that is called to update the current folder in response to + user actions. + + * gtk/gtkpathbar.c (_gtk_path_bar_set_path): Add a boolean + keep_trail argument, and don't leave a "trail" behind unless + it is set. + 2005-07-06 Manish Singh * demos/gtk-demo/menus.c: change_orientation() should return void, diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 86162591a5..42646f5c9d 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,18 @@ +2005-07-07 Matthias Clasen + + Fix #157787, reported by Jonathan Blandford: + + * gtk/gtkfilechooserdefault.c + (gtk_file_chooser_default_set_current_folder): Don't leave a + "trail" behind when set_current_folder is called explicitly. + (gtk_file_chooser_default_update_current_folder): New function + that is called to update the current folder in response to + user actions. + + * gtk/gtkpathbar.c (_gtk_path_bar_set_path): Add a boolean + keep_trail argument, and don't leave a "trail" behind unless + it is set. + 2005-07-06 Manish Singh * demos/gtk-demo/menus.c: change_orientation() should return void, diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 86162591a5..42646f5c9d 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,18 @@ +2005-07-07 Matthias Clasen + + Fix #157787, reported by Jonathan Blandford: + + * gtk/gtkfilechooserdefault.c + (gtk_file_chooser_default_set_current_folder): Don't leave a + "trail" behind when set_current_folder is called explicitly. + (gtk_file_chooser_default_update_current_folder): New function + that is called to update the current folder in response to + user actions. + + * gtk/gtkpathbar.c (_gtk_path_bar_set_path): Add a boolean + keep_trail argument, and don't leave a "trail" behind unless + it is set. + 2005-07-06 Manish Singh * demos/gtk-demo/menus.c: change_orientation() should return void, diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 202e984147..ae0c458356 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -313,6 +313,10 @@ static void gtk_file_chooser_default_screen_changed (GtkWidget * static gboolean gtk_file_chooser_default_set_current_folder (GtkFileChooser *chooser, const GtkFilePath *path, GError **error); +static gboolean gtk_file_chooser_default_update_current_folder (GtkFileChooser *chooser, + const GtkFilePath *path, + gboolean keep_trail, + GError **error); static GtkFilePath * gtk_file_chooser_default_get_current_folder (GtkFileChooser *chooser); static void gtk_file_chooser_default_set_current_name (GtkFileChooser *chooser, const gchar *name); @@ -1008,7 +1012,7 @@ change_folder_and_display_error (GtkFileChooserDefault *impl, path_copy = gtk_file_path_copy (path); error = NULL; - result = _gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), path_copy, &error); + result = gtk_file_chooser_default_update_current_folder (GTK_FILE_CHOOSER (impl), path_copy, TRUE, &error); if (!result) error_changing_folder_dialog (impl, path_copy, error); @@ -4944,6 +4948,15 @@ static gboolean gtk_file_chooser_default_set_current_folder (GtkFileChooser *chooser, const GtkFilePath *path, GError **error) +{ + return gtk_file_chooser_default_update_current_folder (chooser, path, FALSE, error); +} + +static gboolean +gtk_file_chooser_default_update_current_folder (GtkFileChooser *chooser, + const GtkFilePath *path, + gboolean keep_trail, + GError **error) { GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser); gboolean result; @@ -4965,7 +4978,7 @@ gtk_file_chooser_default_set_current_folder (GtkFileChooser *chooser, if (!check_is_folder (impl->file_system, path, error)) return FALSE; - if (!_gtk_path_bar_set_path (GTK_PATH_BAR (impl->browse_path_bar), path, error)) + if (!_gtk_path_bar_set_path (GTK_PATH_BAR (impl->browse_path_bar), path, keep_trail, error)) return FALSE; if (impl->current_folder != path) diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c index 644aa1a1f9..ed80304fe1 100644 --- a/gtk/gtkpathbar.c +++ b/gtk/gtkpathbar.c @@ -1278,6 +1278,7 @@ gtk_path_bar_check_parent_path (GtkPathBar *path_bar, gboolean _gtk_path_bar_set_path (GtkPathBar *path_bar, const GtkFilePath *file_path, + const gboolean keep_trail, GError **error) { GtkFilePath *path; @@ -1294,7 +1295,8 @@ _gtk_path_bar_set_path (GtkPathBar *path_bar, /* Check whether the new path is already present in the pathbar as buttons. * This could be a parent directory or a previous selected subdirectory. */ - if (gtk_path_bar_check_parent_path (path_bar, file_path, path_bar->file_system)) + if (keep_trail && + gtk_path_bar_check_parent_path (path_bar, file_path, path_bar->file_system)) return TRUE; path = gtk_file_path_copy (file_path); @@ -1395,7 +1397,6 @@ _gtk_path_bar_set_path (GtkPathBar *path_bar, return result; } - /* FIXME: This should be a construct-only property */ void _gtk_path_bar_set_file_system (GtkPathBar *path_bar, diff --git a/gtk/gtkpathbar.h b/gtk/gtkpathbar.h index 3ef4ba5bbd..f04146d519 100644 --- a/gtk/gtkpathbar.h +++ b/gtk/gtkpathbar.h @@ -79,6 +79,7 @@ void _gtk_path_bar_set_file_system (GtkPathBar *path_bar, GtkFileSystem *file_system); gboolean _gtk_path_bar_set_path (GtkPathBar *path_bar, const GtkFilePath *file_path, + gboolean keep_trail, GError **error); void _gtk_path_bar_up (GtkPathBar *path_bar); void _gtk_path_bar_down (GtkPathBar *path_bar);