summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-07-03 09:22:39 -0700
committerMatthias Clasen <mclasen@redhat.com>2015-07-04 00:29:26 -0400
commit22294a4a0d9edd101dd9d1f9df92b54362454d71 (patch)
tree092ec0e73a9ad792e4d6640982be1356e180cd11
parented1c349e0b914621a5fc25c6add92a6c8bc2c0b4 (diff)
downloadgtk+-22294a4a0d9edd101dd9d1f9df92b54362454d71.tar.gz
file chooser: Improve column sizing
Allow the name and location columns to be resized, but arrange for their sizing to be reset when the column layout changes (either by the location column appearing/disappearing, or by the time column changing between mtime and atime. This gives a decent compromise between good automatic sizing and user control.
-rw-r--r--gtk/gtkfilechooserwidget.c44
-rw-r--r--gtk/ui/gtkfilechooserwidget.ui32
2 files changed, 47 insertions, 29 deletions
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index 7ca2282585..9f3ca6b64e 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -1611,10 +1611,9 @@ update_time_renderer_visible (GtkFileChooserWidget *impl)
g_object_set (priv->list_time_renderer,
"visible", priv->show_time,
NULL);
- gtk_widget_queue_draw (priv->browse_files_tree_view);
- gtk_tree_view_column_queue_resize (priv->list_time_column);
clear_model_cache (impl, MODEL_COL_DATE_TEXT);
clear_model_cache (impl, MODEL_COL_TIME_TEXT);
+ gtk_widget_queue_draw (priv->browse_files_tree_view);
}
static void
@@ -3812,6 +3811,35 @@ set_busy_cursor (GtkFileChooserWidget *impl,
g_object_unref (cursor);
}
+static void
+update_columns (GtkFileChooserWidget *impl,
+ gboolean location_visible,
+ const gchar *time_title)
+{
+ GtkFileChooserWidgetPrivate *priv = impl->priv;
+ gboolean need_resize = FALSE;
+
+ if (gtk_tree_view_column_get_visible (priv->list_location_column) != location_visible)
+ {
+ gtk_tree_view_column_set_visible (priv->list_location_column, location_visible);
+ need_resize = TRUE;
+ }
+
+ if (g_strcmp0 (gtk_tree_view_column_get_title (priv->list_time_column), time_title) != 0)
+ {
+ gtk_tree_view_column_set_title (priv->list_time_column, time_title);
+ need_resize = TRUE;
+ }
+
+ if (need_resize)
+ {
+ /* This undoes user resizing of columns when the columns change. */
+ gtk_tree_view_column_set_expand (priv->list_name_column, TRUE);
+ gtk_tree_view_column_set_expand (priv->list_location_column, TRUE);
+ gtk_tree_view_columns_autosize (GTK_TREE_VIEW (priv->browse_files_tree_view));
+ }
+}
+
/* Creates a sort model to wrap the file system model and sets it on the tree view */
static void
load_set_model (GtkFileChooserWidget *impl)
@@ -3825,9 +3853,7 @@ load_set_model (GtkFileChooserWidget *impl)
profile_msg (" gtk_tree_view_set_model start", NULL);
gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view),
GTK_TREE_MODEL (priv->browse_files_model));
- gtk_tree_view_column_set_visible (priv->list_location_column, FALSE);
- gtk_tree_view_column_set_title (priv->list_time_column, _("Modified"));
- gtk_tree_view_columns_autosize (GTK_TREE_VIEW (priv->browse_files_tree_view));
+ update_columns (impl, FALSE, _("Modified"));
file_list_set_sort_column_ids (impl);
set_sort_column (impl);
profile_msg (" gtk_tree_view_set_model end", NULL);
@@ -6691,9 +6717,7 @@ search_setup_model (GtkFileChooserWidget *impl)
gtk_tree_view_column_set_sort_column_id (priv->list_size_column, -1);
gtk_tree_view_column_set_sort_column_id (priv->list_location_column, -1);
- gtk_tree_view_column_set_visible (priv->list_location_column, TRUE);
- gtk_tree_view_column_set_title (priv->list_time_column, _("Modified"));
- gtk_tree_view_columns_autosize (GTK_TREE_VIEW (priv->browse_files_tree_view));
+ update_columns (impl, TRUE, _("Modified"));
}
static gboolean
@@ -6912,9 +6936,7 @@ recent_idle_cleanup (gpointer data)
gtk_tree_view_column_set_sort_column_id (priv->list_size_column, -1);
gtk_tree_view_column_set_sort_column_id (priv->list_location_column, -1);
- gtk_tree_view_column_set_visible (priv->list_location_column, TRUE);
- gtk_tree_view_column_set_title (priv->list_time_column, _("Accessed"));
- gtk_tree_view_columns_autosize (GTK_TREE_VIEW (priv->browse_files_tree_view));
+ update_columns (impl, TRUE, _("Accessed"));
set_busy_cursor (impl, FALSE);
diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui
index 33ed215eea..21ad01fa8d 100644
--- a/gtk/ui/gtkfilechooserwidget.ui
+++ b/gtk/ui/gtkfilechooserwidget.ui
@@ -172,8 +172,8 @@
</child>
<child>
<object class="GtkTreeViewColumn" id="list_name_column">
- <property name="resizable">True</property>
<property name="title" translatable="yes">Name</property>
+ <property name="resizable">True</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererPixbuf" id="list_pixbuf_renderer">
@@ -182,34 +182,35 @@
</child>
<child>
<object class="GtkCellRendererText" id="list_name_renderer">
+ <property name="width-chars">10</property>
<property name="ellipsize">end</property>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkTreeViewColumn" id="list_size_column">
+ <object class="GtkTreeViewColumn" id="list_location_column">
+ <property name="title" translatable="yes">Location</property>
<property name="resizable">True</property>
- <property name="title" translatable="yes">Size</property>
+ <property name="visible">False</property>
+ <property name="expand">True</property>
<child>
- <object class="GtkCellRendererText" id="list_size_renderer">
+ <object class="GtkCellRendererText" id="list_location_renderer">
<property name="xalign">0</property>
+ <property name="width-chars">10</property>
+ <property name="ellipsize">start</property>
<property name="xpad">6</property>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkTreeViewColumn" id="list_location_column">
- <property name="resizable">True</property>
- <property name="visible">False</property>
- <property name="title" translatable="yes">Location</property>
+ <object class="GtkTreeViewColumn" id="list_size_column">
+ <property name="title" translatable="yes">Size</property>
+ <property name="sizing">fixed</property>
<child>
- <object class="GtkCellRendererText" id="list_location_renderer">
+ <object class="GtkCellRendererText" id="list_size_renderer">
<property name="xalign">0</property>
- <property name="ellipsize">start</property>
- <property name="width-chars">15</property>
- <property name="max-width-chars">30</property>
<property name="xpad">6</property>
</object>
</child>
@@ -217,20 +218,15 @@
</child>
<child>
<object class="GtkTreeViewColumn" id="list_time_column">
- <property name="resizable">True</property>
<property name="title" translatable="yes">Modified</property>
+ <property name="sizing">fixed</property>
<child>
<object class="GtkCellRendererText" id="list_date_renderer">
- <property name="xalign">1</property>
<property name="xpad">6</property>
</object>
- <cell-packing>
- <property name="expand">True</property>
- </cell-packing>
</child>
<child>
<object class="GtkCellRendererText" id="list_time_renderer">
- <property name="xalign">1</property>
<property name="xpad">6</property>
</object>
</child>