Index: gtk/gtkfilechooserdefault.c
===================================================================
--- gtk/gtkfilechooserdefault.c	(revision 21416)
+++ gtk/gtkfilechooserdefault.c	(working copy)
@@ -407,13 +407,11 @@ static void list_name_data_func (GtkTree
 				 GtkTreeModel      *tree_model,
 				 GtkTreeIter       *iter,
 				 gpointer           data);
-#if 0
 static void list_size_data_func (GtkTreeViewColumn *tree_column,
 				 GtkCellRenderer   *cell,
 				 GtkTreeModel      *tree_model,
 				 GtkTreeIter       *iter,
 				 gpointer           data);
-#endif
 static void list_mtime_data_func (GtkTreeViewColumn *tree_column,
 				  GtkCellRenderer   *cell,
 				  GtkTreeModel      *tree_model,
@@ -794,6 +792,7 @@ _gtk_file_chooser_default_init (GtkFileC
   impl->use_preview_label = TRUE;
   impl->select_multiple = FALSE;
   impl->show_hidden = FALSE;
+  impl->show_size_column = FALSE;
   impl->icon_size = FALLBACK_ICON_SIZE;
   impl->load_state = LOAD_EMPTY;
   impl->reload_state = RELOAD_EMPTY;
@@ -4094,6 +4093,18 @@ show_hidden_toggled_cb (GtkCheckMenuItem
 		NULL);
 }
 
+/* Callback used when the "Show Size Column" menu item is toggled */
+static void
+show_size_column_toggled_cb (GtkCheckMenuItem *item,
+                             GtkFileChooserDefault *impl)
+{
+  impl->show_size_column = gtk_check_menu_item_get_active (item);
+
+  if (impl->list_size_column)
+    gtk_tree_view_column_set_visible (impl->list_size_column,
+                                      impl->show_size_column);
+}
+
 /* Shows an error dialog about not being able to select a dragged file */
 static void
 error_selecting_dragged_file_dialog (GtkFileChooserDefault *impl,
@@ -4297,6 +4308,13 @@ file_list_build_popup_menu (GtkFileChoos
 		    G_CALLBACK (show_hidden_toggled_cb), impl);
   gtk_widget_show (item);
   gtk_menu_shell_append (GTK_MENU_SHELL (impl->browse_files_popup_menu), item);
+
+  item = gtk_check_menu_item_new_with_mnemonic (_("Show _Size Column"));
+  impl->browse_files_popup_menu_size_column_item = item;
+  g_signal_connect (item, "toggled",
+                    G_CALLBACK (show_size_column_toggled_cb), impl);
+  gtk_widget_show (item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (impl->browse_files_popup_menu), item);
 }
 
 /* Updates the popup menu for the file list, creating it if necessary */
@@ -4311,12 +4329,21 @@ file_list_update_popup_menu (GtkFileChoo
    * bookmarks_check_add_sensitivity()
    */
 
+  /* 'Show Hidden Files' */
   g_signal_handlers_block_by_func (impl->browse_files_popup_menu_hidden_files_item,
 				   G_CALLBACK (show_hidden_toggled_cb), impl);
   gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (impl->browse_files_popup_menu_hidden_files_item),
 				  impl->show_hidden);
   g_signal_handlers_unblock_by_func (impl->browse_files_popup_menu_hidden_files_item,
 				     G_CALLBACK (show_hidden_toggled_cb), impl);
+
+  /* 'Show Size Column' */
+  g_signal_handlers_block_by_func (impl->browse_files_popup_menu_size_column_item,
+				   G_CALLBACK (show_size_column_toggled_cb), impl);
+  gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (impl->browse_files_popup_menu_size_column_item),
+				  impl->show_size_column);
+  g_signal_handlers_unblock_by_func (impl->browse_files_popup_menu_size_column_item,
+				     G_CALLBACK (show_size_column_toggled_cb), impl);
 }
 
 static void
@@ -4410,15 +4437,16 @@ list_button_press_event_cb (GtkWidget   
 static void
 file_list_set_sort_column_ids (GtkFileChooserDefault *impl)
 {
-  int name_id, mtime_id;
+  int name_id, mtime_id, size_id;
 
-  name_id = mtime_id = 0;
+  name_id = mtime_id = size_id = 0;
 
   switch (impl->operation_mode)
     {
     case OPERATION_MODE_BROWSE:
       name_id = FILE_LIST_COL_NAME;
       mtime_id = FILE_LIST_COL_MTIME;
+      size_id = FILE_LIST_COL_SIZE;
       break;
     case OPERATION_MODE_SEARCH:
       name_id = SEARCH_MODEL_COL_FILE;
@@ -4432,6 +4460,7 @@ file_list_set_sort_column_ids (GtkFileCh
 
   gtk_tree_view_column_set_sort_column_id (impl->list_name_column, name_id);
   gtk_tree_view_column_set_sort_column_id (impl->list_mtime_column, mtime_id);
+  gtk_tree_view_column_set_sort_column_id (impl->list_size_column, size_id);
 }
 
 static gboolean
@@ -4604,7 +4633,7 @@ create_file_list (GtkFileChooserDefault 
 					   list_name_data_func, impl, NULL);
 
   gtk_tree_view_append_column (GTK_TREE_VIEW (impl->browse_files_tree_view), impl->list_name_column);
-#if 0
+
   /* Size column */
 
   column = gtk_tree_view_column_new ();
@@ -4616,7 +4645,7 @@ create_file_list (GtkFileChooserDefault 
 					   list_size_data_func, impl, NULL);
   gtk_tree_view_column_set_sort_column_id (column, FILE_LIST_COL_SIZE);
   gtk_tree_view_append_column (GTK_TREE_VIEW (impl->browse_files_tree_view), column);
-#endif
+  impl->list_size_column = column;
 
   /* Modification time column */
 
@@ -5949,12 +5978,14 @@ settings_load (GtkFileChooserDefault *im
   LocationMode location_mode;
   gboolean show_hidden;
   gboolean expand_folders;
+  gboolean show_size_column;
 
   settings = _gtk_file_chooser_settings_new ();
 
   location_mode = _gtk_file_chooser_settings_get_location_mode (settings);
   show_hidden = _gtk_file_chooser_settings_get_show_hidden (settings);
   expand_folders = _gtk_file_chooser_settings_get_expand_folders (settings);
+  show_size_column = _gtk_file_chooser_settings_get_show_size_column (settings);
 
   g_object_unref (settings);
 
@@ -5963,6 +5994,9 @@ settings_load (GtkFileChooserDefault *im
   impl->expand_folders = expand_folders;
   if (impl->save_expander)
     gtk_expander_set_expanded (GTK_EXPANDER (impl->save_expander), expand_folders);
+  impl->show_size_column = show_size_column;
+  if (impl->list_size_column)
+    gtk_tree_view_column_set_visible (impl->list_size_column, show_size_column);
 }
 
 static void
@@ -8856,6 +8890,8 @@ search_switch_to_browse_mode (GtkFileCho
 	gtk_widget_show (impl->location_entry_box);
     }
 
+  gtk_tree_view_column_set_visible (impl->list_size_column, impl->show_size_column);
+
   impl->operation_mode = OPERATION_MODE_BROWSE;
 
   file_list_set_sort_column_ids (impl);
@@ -9215,6 +9251,9 @@ search_setup_widgets (GtkFileChooserDefa
   gtk_widget_hide (impl->browse_path_bar);
   gtk_widget_hide (impl->browse_new_folder_button);
 
+  /* hide the file size column if it's visible */
+  gtk_tree_view_column_set_visible (impl->list_size_column, FALSE);
+
   /* Box for search widgets */
   gtk_box_pack_start (GTK_BOX (impl->browse_path_bar_hbox), impl->search_hbox, TRUE, TRUE, 0);
   gtk_widget_show_all (impl->search_hbox);
@@ -9367,6 +9406,8 @@ recent_switch_to_browse_mode (GtkFileCho
 	gtk_widget_show (impl->location_entry_box);
     }
 
+  gtk_tree_view_column_set_visible (impl->list_size_column, impl->show_size_column);
+
   impl->operation_mode = OPERATION_MODE_BROWSE;
 
   file_list_set_sort_column_ids (impl);
@@ -9930,6 +9971,10 @@ recent_activate (GtkFileChooserDefault *
     }
 
   recent_hide_entry (impl);
+
+  /* hide the file size column if it's visible */
+  gtk_tree_view_column_set_visible (impl->list_size_column, FALSE);
+
   file_list_set_sort_column_ids (impl);
   recent_start_loading (impl);
 }
@@ -10804,7 +10849,6 @@ list_name_data_func (GtkTreeViewColumn *
 		NULL);
 }
 
-#if 0
 static void
 list_size_data_func (GtkTreeViewColumn *tree_column,
 		     GtkCellRenderer   *cell,
@@ -10813,10 +10857,17 @@ list_size_data_func (GtkTreeViewColumn *
 		     gpointer           data)
 {
   GtkFileChooserDefault *impl = data;
-  GFileInfo *info = get_list_file_info (impl, iter);
-  gint64 size;
+  GFileInfo *info;
+  goffset size;
   gchar *str;
-  gboolean sensitive = TRUE;
+  gboolean sensitive;
+
+  if (impl->operation_mode == OPERATION_MODE_SEARCH ||
+      impl->operation_mode == OPERATION_MODE_RECENT)
+    return;
+
+  info = get_list_file_info (impl, iter);
+  sensitive = TRUE;
 
   if (!info || g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
     {
@@ -10827,18 +10878,9 @@ list_size_data_func (GtkTreeViewColumn *
       return;
     }
 
-  size = gtk_file_info_get_size (info);
-#if 0
-  if (size < (gint64)1024)
-    str = g_strdup_printf (g_dngettext (GETTEXT_DOMAIN, "%d byte", "%d bytes", (gint)size), (gint)size);
-  else if (size < (gint64)1024*1024)
-    str = g_strdup_printf (_("%.1f KB"), size / (1024.));
-  else if (size < (gint64)1024*1024*1024)
-    str = g_strdup_printf (_("%.1f MB"), size / (1024.*1024.));
-  else
-    str = g_strdup_printf (_("%.1f GB"), size / (1024.*1024.*1024.));
-#endif
-  str = g_strdup_printf ("%" G_GINT64_FORMAT, size);
+  size = g_file_info_get_size (info);
+  str = g_format_size_for_display (size);
+
   if (impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
       impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
     sensitive = FALSE;
@@ -10851,7 +10893,6 @@ list_size_data_func (GtkTreeViewColumn *
 
   g_free (str);
 }
-#endif
 
 /* Tree column data callback for the file list; fetches the mtime of a file */
 static void
Index: gtk/gtkfilechooserprivate.h
===================================================================
--- gtk/gtkfilechooserprivate.h	(revision 21416)
+++ gtk/gtkfilechooserprivate.h	(working copy)
@@ -178,6 +178,7 @@ struct _GtkFileChooserDefault
   GtkWidget *browse_files_popup_menu;
   GtkWidget *browse_files_popup_menu_add_shortcut_item;
   GtkWidget *browse_files_popup_menu_hidden_files_item;
+  GtkWidget *browse_files_popup_menu_size_column_item;
   GtkWidget *browse_new_folder_button;
   GtkWidget *browse_path_bar_hbox;
   GtkWidget *browse_path_bar;
@@ -267,6 +268,7 @@ struct _GtkFileChooserDefault
   GtkTreeViewColumn *list_name_column;
   GtkCellRenderer *list_name_renderer;
   GtkTreeViewColumn *list_mtime_column;
+  GtkTreeViewColumn *list_size_column;
 
   GSource *edited_idle;
   char *edited_new_text;
@@ -298,6 +300,7 @@ struct _GtkFileChooserDefault
   guint has_desktop : 1;
   guint has_search : 1;
   guint has_recent : 1;
+  guint show_size_column : 1;
 
 #if 0
   guint shortcuts_drag_outside : 1;
Index: gtk/gtkfilechoosersettings.c
===================================================================
--- gtk/gtkfilechoosersettings.c	(revision 21416)
+++ gtk/gtkfilechoosersettings.c	(working copy)
@@ -41,6 +41,7 @@
 #define LOCATION_MODE_KEY	"LocationMode"
 #define SHOW_HIDDEN_KEY		"ShowHidden"
 #define EXPAND_FOLDERS_KEY	"ExpandFolders"
+#define SHOW_SIZE_COLUMN_KEY    "ShowSizeColumn"
 
 #define MODE_PATH_BAR          "path-bar"
 #define MODE_FILENAME_ENTRY    "filename-entry"
@@ -127,6 +128,17 @@ ensure_settings_read (GtkFileChooserSett
   else
     settings->expand_folders = value != FALSE;
 
+  value = g_key_file_get_boolean (key_file, SETTINGS_GROUP,
+				  SHOW_SIZE_COLUMN_KEY, &error);
+  if (error)
+    {
+      g_warning ("Failed to read show-size-column setting in filechooser settings: %s",
+		 error->message);
+      g_clear_error (&error);
+    }
+  else
+    settings->show_size_column = value != FALSE;
+
  out:
 
   g_key_file_free (key_file);
@@ -148,6 +160,7 @@ _gtk_file_chooser_settings_init (GtkFile
   settings->location_mode = LOCATION_MODE_PATH_BAR;
   settings->show_hidden = FALSE;
   settings->expand_folders = FALSE;
+  settings->show_size_column = FALSE;
 }
 
 GtkFileChooserSettings *
@@ -192,6 +205,20 @@ _gtk_file_chooser_settings_get_expand_fo
 }
 
 void
+_gtk_file_chooser_settings_set_show_size_column (GtkFileChooserSettings *settings,
+					         gboolean show_column)
+{
+  settings->show_size_column = show_column != FALSE;
+}
+
+gboolean
+_gtk_file_chooser_settings_get_show_size_column (GtkFileChooserSettings *settings)
+{
+  ensure_settings_read (settings);
+  return settings->show_size_column;
+}
+
+void
 _gtk_file_chooser_settings_set_expand_folders (GtkFileChooserSettings *settings,
 					       gboolean expand_folders)
 {
Index: gtk/gtkfilechoosersettings.h
===================================================================
--- gtk/gtkfilechoosersettings.h	(revision 21416)
+++ gtk/gtkfilechoosersettings.h	(working copy)
@@ -38,11 +38,10 @@ struct _GtkFileChooserSettings
 
   LocationMode location_mode;
 
-  guint settings_read : 1;
-
-  guint show_hidden : 1;
-
-  guint expand_folders : 1;
+  guint settings_read    : 1;
+  guint show_hidden      : 1;
+  guint show_size_column : 1;
+  guint expand_folders   : 1;
 };
 
 struct _GtkFileChooserSettingsClass
@@ -66,6 +65,10 @@ gboolean _gtk_file_chooser_settings_get_
 void     _gtk_file_chooser_settings_set_expand_folders (GtkFileChooserSettings *settings,
 							gboolean                expand_folders);
 
+gboolean _gtk_file_chooser_settings_get_show_size_column (GtkFileChooserSettings *settings);
+void     _gtk_file_chooser_settings_set_show_size_column (GtkFileChooserSettings *settings,
+                                                          gboolean                show_column);
+
 gboolean _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
 					  GError                **error);
 
