summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@ximian.com>2005-01-06 01:46:39 +0000
committerFederico Mena Quintero <federico@src.gnome.org>2005-01-06 01:46:39 +0000
commitfaaee051d1aa76ce24c25eebcda7a656062a1002 (patch)
tree158ce1214c3022dc32d585435abb3a40407b67ef /gtk
parent47a5564ab37427cb3f54e8692d0ed6190743b2cc (diff)
downloadgtk+-faaee051d1aa76ce24c25eebcda7a656062a1002.tar.gz
Don't call button_data_free() explicitly; the button is weak-reffed and
2005-01-05 Federico Mena Quintero <federico@ximian.com> * gtk/gtkpathbar.c (_gtk_path_bar_set_path): Don't call button_data_free() explicitly; the button is weak-reffed and the callback will free the button data. Fixes #163010. (_gtk_path_bar_set_path): Don't ref/sink the button. And for the failure case, call gtk_widget_destroy() on it. * gtk/gtkfilechooserdefault.c (check_is_folder): Use gtk_file_system_get_folder() again (see the ChangeLog entry from 2004-08-25). We can't first get the parent folder and then request the info for the path in question, as the parent folder may not be readable. See bug #162617. (gtk_file_chooser_default_set_current_folder): Assert that the passed-in path is not null. (shortcuts_find_current_folder): Likewise. (shortcuts_add_current_folder): Likewise. (set_list_model): Likewise. (gtk_file_chooser_default_map): Only reload the current folder if it exists. (bookmarks_check_add_sensitivity): Check for the current folder being NULL. (browse_files_select_first_row): Don't set the cursor if there is no model loaded.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkfilechooserdefault.c44
-rw-r--r--gtk/gtkpathbar.c7
2 files changed, 20 insertions, 31 deletions
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index bf8722aa40..0baca0b123 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -1066,6 +1066,7 @@ shortcuts_find_current_folder (GtkFileChooserDefault *impl)
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view));
+ g_assert (impl->current_folder != NULL);
pos = shortcut_find_position (impl, impl->current_folder);
if (pos == -1)
{
@@ -1130,32 +1131,14 @@ check_is_folder (GtkFileSystem *file_system,
const GtkFilePath *path,
GError **error)
{
- GtkFileInfo *info;
- gboolean is_folder;
+ GtkFileFolder *folder;
- /* Use get_file_info() rather than trying get_folder() and checking
- * for an error directly because older versions of the gnome-vfs
- * backend don't return an error immediately. This way is also
- * more efficient if we already have the parent folder.
- */
- info = get_file_info (file_system, path, FALSE, error);
-
- if (!info)
+ folder = gtk_file_system_get_folder (file_system, path, 0, error);
+ if (!folder)
return FALSE;
-
- is_folder = gtk_file_info_get_is_folder (info);
-
- if (!is_folder)
- g_set_error (error,
- GTK_FILE_CHOOSER_ERROR,
- GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
- "%s: %s",
- gtk_file_info_get_display_name (info),
- g_strerror (ENOTDIR));
-
- gtk_file_info_free (info);
- return is_folder;
+ g_object_unref (folder);
+ return TRUE;
}
/* Inserts a path in the shortcuts tree, making a copy of it; alternatively,
@@ -1503,6 +1486,8 @@ shortcuts_add_current_folder (GtkFileChooserDefault *impl)
success = TRUE;
+ g_assert (impl->current_folder != NULL);
+
pos = shortcut_find_position (impl, impl->current_folder);
if (pos == -1)
{
@@ -2128,7 +2113,7 @@ bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl)
selection_check (impl, &num_selected, NULL, &all_folders);
if (num_selected == 0)
- active = (shortcut_find_position (impl, impl->current_folder) == -1);
+ active = (impl->current_folder != NULL) && (shortcut_find_position (impl, impl->current_folder) == -1);
else if (num_selected == 1)
{
const GtkFilePath *path;
@@ -4092,7 +4077,9 @@ gtk_file_chooser_default_map (GtkWidget *widget)
GTK_WIDGET_CLASS (parent_class)->map (widget);
- change_folder_and_display_error (impl, impl->current_folder);
+ if (impl->current_folder)
+ change_folder_and_display_error (impl, impl->current_folder);
+
bookmarks_changed_cb (impl->file_system, impl);
}
@@ -4345,6 +4332,9 @@ browse_files_select_first_row (GtkFileChooserDefault *impl)
{
GtkTreePath *path;
+ if (!impl->sort_model)
+ return;
+
path = gtk_tree_path_new_from_indices (0, -1);
gtk_tree_view_set_cursor (GTK_TREE_VIEW (impl->browse_files_tree_view), path, NULL, FALSE);
gtk_tree_path_free (path);
@@ -4429,6 +4419,8 @@ static gboolean
set_list_model (GtkFileChooserDefault *impl,
GError **error)
{
+ g_assert (impl->current_folder != NULL);
+
load_remove_timer (impl);
if (impl->browse_files_model)
@@ -4504,6 +4496,8 @@ gtk_file_chooser_default_set_current_folder (GtkFileChooser *chooser,
GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser);
gboolean result;
+ g_assert (path != NULL);
+
if (impl->local_only &&
!gtk_file_system_path_is_local (impl->file_system, path))
{
diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c
index fdc29b391f..4de2da197b 100644
--- a/gtk/gtkpathbar.c
+++ b/gtk/gtkpathbar.c
@@ -1294,9 +1294,6 @@ _gtk_path_bar_set_path (GtkPathBar *path_bar,
gtk_file_info_free (file_info);
gtk_file_path_free (path);
- g_object_ref (button_data->button);
- gtk_object_sink (GTK_OBJECT (button_data->button));
-
new_buttons = g_list_prepend (new_buttons, button_data);
if (button_data->type != NORMAL_BUTTON)
@@ -1331,9 +1328,7 @@ _gtk_path_bar_set_path (GtkPathBar *path_bar,
ButtonData *button_data;
button_data = BUTTON_DATA (l->data);
-
- gtk_widget_unref (button_data->button);
- button_data_free (button_data);
+ gtk_widget_destroy (button_data->button);
}
g_list_free (new_buttons);