From 8c2228557f50aa583b7290957d11e92a83e374de Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Fri, 11 May 2007 00:27:22 +0100 Subject: Set sensitivity of rows consistently across actions This commit fixes this issue found in review: > in select/create-folder mode, the search and recent files > code should behave the same as the regular file lists. The sensitivity of the rows in OPERATION_MODE_SEARCH and in OPERATION_MODE_RECENT is now set according to the action of the GtkFileChooserDefault widget. Signed-off-by: Emmanuele Bassi --- gtk/gtkfilechooserdefault.c | 117 +++++++++++++++++++++++++++++++++++-------- 1 files changed, 95 insertions(+), 22 deletions(-) diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index bc5a8c0..159a062 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -10294,24 +10294,59 @@ list_select_func (GtkTreeSelection *selection, { GtkFileChooserDefault *impl = data; - if (impl->operation_mode == OPERATION_MODE_SEARCH) - return TRUE; - if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) { GtkTreeIter iter, child_iter; - const GtkFileInfo *info; - if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->sort_model), &iter, path)) - return FALSE; - - gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, &child_iter, &iter); + switch (impl->operation_mode) + { + case OPERATION_MODE_SEARCH: + { + gboolean is_folder; - info = _gtk_file_system_model_get_info (impl->browse_files_model, &child_iter); + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->search_model_sort), &iter, path)) + return FALSE; - if (info && !gtk_file_info_get_is_folder (info)) - return FALSE; + search_get_valid_child_iter (impl, &child_iter, &iter); + gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter, + SEARCH_MODEL_COL_IS_FOLDER, &is_folder, + -1); + if (!is_folder) + return FALSE; + } + break; + + case OPERATION_MODE_RECENT: + { + gboolean is_folder; + + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->recent_model_sort), &iter, path)) + return FALSE; + + recent_get_valid_child_iter (impl, &child_iter, &iter); + gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter, + RECENT_MODEL_COL_IS_FOLDER, &is_folder, + -1); + if (!is_folder) + return FALSE; + } + break; + + case OPERATION_MODE_BROWSE: + { + const GtkFileInfo *info; + + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->sort_model), &iter, path)) + return FALSE; + + gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, &child_iter, &iter); + info = _gtk_file_system_model_get_info (impl->browse_files_model, &child_iter); + if (info && !gtk_file_info_get_is_folder (info)) + return FALSE; + } + break; + } } return TRUE; @@ -10490,12 +10525,17 @@ list_icon_data_func (GtkTreeViewColumn *tree_column, case OPERATION_MODE_SEARCH: { GtkTreeIter child_iter; + gboolean is_folder; search_get_valid_child_iter (impl, &child_iter, iter); gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter, SEARCH_MODEL_COL_PIXBUF, &pixbuf, + SEARCH_MODEL_COL_IS_FOLDER, &is_folder, -1); - sensitive = TRUE; + + if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || + impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + sensitive = is_folder; } break; @@ -10503,16 +10543,19 @@ list_icon_data_func (GtkTreeViewColumn *tree_column, { GtkTreeIter child_iter; GtkRecentInfo *info; + gboolean is_folder; recent_get_valid_child_iter (impl, &child_iter, iter); gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter, RECENT_MODEL_COL_INFO, &info, + RECENT_MODEL_COL_IS_FOLDER, &is_folder, -1); pixbuf = gtk_recent_info_get_icon (info, impl->icon_size); - - if (impl->local_only && !gtk_recent_info_is_local (info)) - sensitive = FALSE; + + if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || + impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + sensitive = is_folder; } break; @@ -10570,7 +10613,7 @@ list_name_data_func (GtkTreeViewColumn *tree_column, { GtkFileChooserDefault *impl = data; const GtkFileInfo *info; - gboolean sensitive; + gboolean sensitive = TRUE; if (impl->operation_mode == OPERATION_MODE_SEARCH) { @@ -10578,20 +10621,28 @@ list_name_data_func (GtkTreeViewColumn *tree_column, GtkFilePath *file_path; gchar *display_name, *tmp; gchar *text; + gboolean is_folder; search_get_valid_child_iter (impl, &child_iter, iter); gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter, SEARCH_MODEL_COL_PATH, &file_path, SEARCH_MODEL_COL_DISPLAY_NAME, &display_name, + SEARCH_MODEL_COL_IS_FOLDER, &is_folder, -1); tmp = gtk_file_system_path_to_filename (impl->file_system, file_path); text = g_strdup_printf ("%s\n%s", display_name, tmp); g_free (tmp); + if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || + impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + { + sensitive = is_folder; + } + g_object_set (cell, "markup", text, - "sensitive", TRUE, + "sensitive", sensitive, "ellipsize", PANGO_ELLIPSIZE_END, NULL); @@ -10604,11 +10655,13 @@ list_name_data_func (GtkTreeViewColumn *tree_column, { GtkTreeIter child_iter; GtkRecentInfo *recent_info; - char *tmp, *text; + gchar *tmp, *text; + gboolean is_folder; recent_get_valid_child_iter (impl, &child_iter, iter); gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter, RECENT_MODEL_COL_INFO, &recent_info, + RECENT_MODEL_COL_IS_FOLDER, &is_folder, -1); tmp = gtk_recent_info_get_short_name (recent_info); @@ -10617,9 +10670,15 @@ list_name_data_func (GtkTreeViewColumn *tree_column, gtk_recent_info_get_uri_display (recent_info)); g_free (tmp); + if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || + impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + { + sensitive = is_folder; + } + g_object_set (cell, "markup", text, - "sensitive", TRUE, + "sensitive", sensitive, "ellipsize", PANGO_ELLIPSIZE_END, NULL); g_free (text); @@ -10725,29 +10784,43 @@ list_mtime_data_func (GtkTreeViewColumn *tree_column, { GtkTreeIter child_iter; struct stat *statbuf; + gboolean is_folder; search_get_valid_child_iter (impl, &child_iter, iter); gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter, SEARCH_MODEL_COL_STAT, &statbuf, + SEARCH_MODEL_COL_IS_FOLDER, &is_folder, -1); if (statbuf) time_mtime = statbuf->st_mtime; else time_mtime = 0; + + + if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || + impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + sensitive = is_folder; } else if (impl->operation_mode == OPERATION_MODE_RECENT) { GtkTreeIter child_iter; GtkRecentInfo *info; + gboolean is_folder; recent_get_valid_child_iter (impl, &child_iter, iter); gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter, RECENT_MODEL_COL_INFO, &info, + RECENT_MODEL_COL_IS_FOLDER, &is_folder, -1); - time_mtime = (GtkFileTime) gtk_recent_info_get_modified (info); - if (impl->local_only && !gtk_recent_info_is_local (info)) - sensitive = FALSE; + if (info) + time_mtime = (GtkFileTime) gtk_recent_info_get_modified (info); + else + time_mtime = 0; + + if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || + impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + sensitive = is_folder; } else { -- 1.4.4.2