]> Pileus Git - ~andy/gtk/commitdiff
Show files in folder modes. (#157013, Nickolay V. Shmyrev)
authorMatthias Clasen <mclasen@redhat.com>
Sun, 7 Nov 2004 05:15:25 +0000 (05:15 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sun, 7 Nov 2004 05:15:25 +0000 (05:15 +0000)
2004-11-07  Matthias Clasen  <mclasen@redhat.com>

Show files in folder modes. (#157013, Nickolay V. Shmyrev)

* gtk/gtkfilechooserdefault.c (create_file_list): Use a selection
function to determine which rows can be selected.
(update_appearance): Always show files. Also queue a redraw.
(set_list_model): Always show files.
(list_select_func): The selection function used for the file list.
Don't allow to select files when in select/create folder mode.
(list_row_activated): Don't activate files in folder modes.
(list_icon_data_func, list_mtime_data_func, list_size_data_func):
Render files insensitive in folder modes.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkfilechooserdefault.c

index 07dc19a2d26ff9a8bc5bd418b6fb3d00ddee7da8..4324da0c3755bc632d5957e1604813f7f296589e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2004-11-07  Matthias Clasen  <mclasen@redhat.com>
+
+       Show files in folder modes. (#157013, Nickolay V. Shmyrev)
+       
+       * gtk/gtkfilechooserdefault.c (create_file_list): Use a selection
+       function to determine which rows can be selected.
+       (update_appearance): Always show files. Also queue a redraw.
+       (set_list_model): Always show files.
+       (list_select_func): The selection function used for the file list.
+       Don't allow to select files when in select/create folder mode.
+       (list_row_activated): Don't activate files in folder modes.
+       (list_icon_data_func, list_mtime_data_func, list_size_data_func): 
+       Render files insensitive in folder modes.
+
 2004-11-06  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkfilechooserbutton.c (gtk_file_chooser_button_set_property): 
index 07dc19a2d26ff9a8bc5bd418b6fb3d00ddee7da8..4324da0c3755bc632d5957e1604813f7f296589e 100644 (file)
@@ -1,3 +1,17 @@
+2004-11-07  Matthias Clasen  <mclasen@redhat.com>
+
+       Show files in folder modes. (#157013, Nickolay V. Shmyrev)
+       
+       * gtk/gtkfilechooserdefault.c (create_file_list): Use a selection
+       function to determine which rows can be selected.
+       (update_appearance): Always show files. Also queue a redraw.
+       (set_list_model): Always show files.
+       (list_select_func): The selection function used for the file list.
+       Don't allow to select files when in select/create folder mode.
+       (list_row_activated): Don't activate files in folder modes.
+       (list_icon_data_func, list_mtime_data_func, list_size_data_func): 
+       Render files insensitive in folder modes.
+
 2004-11-06  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkfilechooserbutton.c (gtk_file_chooser_button_set_property): 
index 07dc19a2d26ff9a8bc5bd418b6fb3d00ddee7da8..4324da0c3755bc632d5957e1604813f7f296589e 100644 (file)
@@ -1,3 +1,17 @@
+2004-11-07  Matthias Clasen  <mclasen@redhat.com>
+
+       Show files in folder modes. (#157013, Nickolay V. Shmyrev)
+       
+       * gtk/gtkfilechooserdefault.c (create_file_list): Use a selection
+       function to determine which rows can be selected.
+       (update_appearance): Always show files. Also queue a redraw.
+       (set_list_model): Always show files.
+       (list_select_func): The selection function used for the file list.
+       Don't allow to select files when in select/create folder mode.
+       (list_row_activated): Don't activate files in folder modes.
+       (list_icon_data_func, list_mtime_data_func, list_size_data_func): 
+       Render files insensitive in folder modes.
+
 2004-11-06  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkfilechooserbutton.c (gtk_file_chooser_button_set_property): 
index 07dc19a2d26ff9a8bc5bd418b6fb3d00ddee7da8..4324da0c3755bc632d5957e1604813f7f296589e 100644 (file)
@@ -1,3 +1,17 @@
+2004-11-07  Matthias Clasen  <mclasen@redhat.com>
+
+       Show files in folder modes. (#157013, Nickolay V. Shmyrev)
+       
+       * gtk/gtkfilechooserdefault.c (create_file_list): Use a selection
+       function to determine which rows can be selected.
+       (update_appearance): Always show files. Also queue a redraw.
+       (set_list_model): Always show files.
+       (list_select_func): The selection function used for the file list.
+       Don't allow to select files when in select/create folder mode.
+       (list_row_activated): Don't activate files in folder modes.
+       (list_icon_data_func, list_mtime_data_func, list_size_data_func): 
+       Render files insensitive in folder modes.
+
 2004-11-06  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkfilechooserbutton.c (gtk_file_chooser_button_set_property): 
index 21432a6e4fc97000484024f98adae42fbe743caa..ef380c8dad4d25e7d34ca70f682a4a3ae23c588f 100644 (file)
@@ -367,6 +367,12 @@ static int shortcut_find_position (GtkFileChooserDefault *impl,
 
 static void bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl);
 
+static gboolean list_select_func   (GtkTreeSelection      *selection,
+                                   GtkTreeModel          *model,
+                                   GtkTreePath           *path,
+                                   gboolean               path_currently_selected,
+                                   gpointer               data);
+
 static void list_selection_changed     (GtkTreeSelection      *tree_selection,
                                        GtkFileChooserDefault *impl);
 static void list_row_activated         (GtkTreeView           *tree_view,
@@ -3059,6 +3065,9 @@ create_file_list (GtkFileChooserDefault *impl)
                    G_CALLBACK (list_button_press_event_cb), impl);
 
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view));
+  gtk_tree_selection_set_select_function (selection,
+                                         list_select_func,
+                                         impl, NULL);
   gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (impl->browse_files_tree_view),
                                          GDK_BUTTON1_MASK,
                                          file_list_source_targets,
@@ -3617,18 +3626,6 @@ update_appearance (GtkFileChooserDefault *impl)
       gtk_widget_hide (impl->save_widgets);
       gtk_widget_show (impl->browse_widgets);
     }
-  /* FIXME: */
-  if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
-      impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
-    {
-      if (impl->browse_files_model)
-       _gtk_file_system_model_set_show_files (impl->browse_files_model, FALSE);
-    }
-  else
-    {
-      if (impl->browse_files_model)
-       _gtk_file_system_model_set_show_files (impl->browse_files_model, TRUE);
-    }
 
   if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN)
     gtk_widget_hide (impl->browse_new_folder_button);
@@ -3685,6 +3682,8 @@ update_appearance (GtkFileChooserDefault *impl)
       gtk_widget_hide (impl->browse_extra_align);
     }
 
+  gtk_widget_queue_draw (impl->browse_files_tree_view);
+  
   g_signal_emit_by_name (impl, "default-size-changed");
 }
 
@@ -3705,6 +3704,8 @@ gtk_file_chooser_default_set_property (GObject      *object,
 
        if (action != impl->action)
          {
+           gtk_file_chooser_default_unselect_all (impl);
+           
            if (action == GTK_FILE_CHOOSER_ACTION_SAVE && impl->select_multiple)
              {
                g_warning ("Multiple selection mode is not allowed in Save mode");
@@ -4199,19 +4200,7 @@ set_list_model (GtkFileChooserDefault *impl,
                    G_CALLBACK (browse_files_model_finished_loading_cb), impl);
 
   _gtk_file_system_model_set_show_hidden (impl->browse_files_model, impl->show_hidden);
-  switch (impl->action)
-    {
-    case GTK_FILE_CHOOSER_ACTION_OPEN:
-    case GTK_FILE_CHOOSER_ACTION_SAVE:
-      _gtk_file_system_model_set_show_files (impl->browse_files_model, TRUE);
-      break;
-    case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER:
-    case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
-      _gtk_file_system_model_set_show_files (impl->browse_files_model, FALSE);
-      break;
-    default:
-      g_assert_not_reached ();
-    }
+
   install_list_model_filter (impl);
 
   impl->sort_model = (GtkTreeModelSort *)gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (impl->browse_files_model));
@@ -5374,6 +5363,35 @@ shortcuts_select_func  (GtkTreeSelection  *selection,
   return (*gtk_tree_path_get_indices (path) != shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR));
 }
 
+static gboolean
+list_select_func  (GtkTreeSelection  *selection,
+                  GtkTreeModel      *model,
+                  GtkTreePath       *path,
+                  gboolean           path_currently_selected,
+                  gpointer           data)
+{
+  GtkFileChooserDefault *impl = data;
+
+  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);
+
+      info = _gtk_file_system_model_get_info (impl->browse_files_model, &child_iter);
+
+      if (!gtk_file_info_get_is_folder (info))
+       return FALSE;
+    }
+    
+  return TRUE;
+}
+
 static void
 list_selection_changed (GtkTreeSelection      *selection,
                        GtkFileChooserDefault *impl)
@@ -5433,7 +5451,9 @@ list_row_activated (GtkTreeView           *tree_view,
       return;
     }
 
-  g_signal_emit_by_name (impl, "file-activated");
+  if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
+      impl->action == GTK_FILE_CHOOSER_ACTION_SAVE)
+    g_signal_emit_by_name (impl, "file-activated");
 }
 
 static void
@@ -5477,6 +5497,10 @@ list_icon_data_func (GtkTreeViewColumn *tree_column,
   GtkTreeIter child_iter;
   const GtkFilePath *path;
   GdkPixbuf *pixbuf;
+  const GtkFileInfo *info; 
+  gboolean sensitive = TRUE;
+  
+  info = get_list_file_info (impl, iter);
 
   gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model,
                                                  &child_iter,
@@ -5488,10 +5512,16 @@ list_icon_data_func (GtkTreeViewColumn *tree_column,
   /* FIXME: NULL GError */
   pixbuf = gtk_file_system_render_icon (impl->file_system, path, GTK_WIDGET (impl),
                                        impl->icon_size, NULL);
+
+  if (info && (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
+              impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER))
+    sensitive =  gtk_file_info_get_is_folder (info);    
+    
   g_object_set (cell,
                "pixbuf", pixbuf,
+               "sensitive", sensitive,
                NULL);
-
+    
   if (pixbuf)
     g_object_unref (pixbuf);
 }
@@ -5505,17 +5535,27 @@ list_name_data_func (GtkTreeViewColumn *tree_column,
 {
   GtkFileChooserDefault *impl = data;
   const GtkFileInfo *info = get_list_file_info (impl, iter);
+  gboolean sensitive = TRUE;
 
   if (!info)
     {
       g_object_set (cell,
                    "text", _("Type name of new folder"),
                    NULL);
+
       return;
     }
 
+
+  if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER
+        || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
+    {
+      sensitive = gtk_file_info_get_is_folder (info);
+    } 
+    
   g_object_set (cell,
                "text", gtk_file_info_get_display_name (info),
+               "sensitive", sensitive,
                NULL);
 }
 
@@ -5531,9 +5571,13 @@ list_size_data_func (GtkTreeViewColumn *tree_column,
   const GtkFileInfo *info = get_list_file_info (impl, iter);
   gint64 size;
   gchar *str;
+  gboolean sensitive = TRUE;
 
-  if (!info || gtk_file_info_get_is_folder (info))
-    return;
+  if (!info || gtk_file_info_get_is_folder (info)) 
+    {
+      g_object_set (cell,"sensitive", sensitive, NULL);
+      return;
+    }
 
   size = gtk_file_info_get_size (info);
 
@@ -5546,8 +5590,13 @@ list_size_data_func (GtkTreeViewColumn *tree_column,
   else
     str = g_strdup_printf (_("%.1f G"), size / (1024.*1024.*1024.));
 
+  if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
+      impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
+    sensitive = FALSE;
+
   g_object_set (cell,
-               "text", str,
+               "text", str,
+               "sensitive", sensitive,
                NULL);
 
   g_free (str);
@@ -5568,6 +5617,7 @@ list_mtime_data_func (GtkTreeViewColumn *tree_column,
   GDate mtime, now;
   int days_diff;
   char buf[256];
+  gboolean sensitive = TRUE;
 
   impl = data;
 
@@ -5576,6 +5626,7 @@ list_mtime_data_func (GtkTreeViewColumn *tree_column,
     {
       g_object_set (cell,
                    "text", "",
+                   "sensitive", TRUE,
                    NULL);
       return;
     }
@@ -5605,8 +5656,13 @@ list_mtime_data_func (GtkTreeViewColumn *tree_column,
        strcpy (buf, _("Unknown"));
     }
 
+  if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
+      impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
+    sensitive = gtk_file_info_get_is_folder (info);
+
   g_object_set (cell,
                "text", buf,
+               "sensitive", sensitive,
                NULL);
 }