[file-roller: 17/26] file selector: save and restore the sidebar size, set a good default value as well



commit 91034fa6f0e240f6c9556f54b21e2a3985114513
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Thu Aug 9 13:25:23 2012 +0200

    file selector: save and restore the sidebar size, set a good default value as well

 data/org.gnome.FileRoller.gschema.xml.in |    3 +
 src/fr-file-selector-dialog.c            |   79 ++++++++++++++++++------------
 src/ui/file-selector.ui                  |    3 +-
 3 files changed, 52 insertions(+), 33 deletions(-)
---
diff --git a/data/org.gnome.FileRoller.gschema.xml.in b/data/org.gnome.FileRoller.gschema.xml.in
index 947d43a..03f9006 100644
--- a/data/org.gnome.FileRoller.gschema.xml.in
+++ b/data/org.gnome.FileRoller.gschema.xml.in
@@ -139,6 +139,9 @@
     <key name="show-hidden" type="b">
       <default>false</default>
     </key>
+    <key name="sidebar-size" type="i">
+      <default>-1</default>
+    </key>
   </schema>
 
   <schema id="org.gnome.FileRoller.General" path="/org/gnome/file-roller/general/" gettext-domain="file-roller">
diff --git a/src/fr-file-selector-dialog.c b/src/fr-file-selector-dialog.c
index 3da83bb..4331b7a 100644
--- a/src/fr-file-selector-dialog.c
+++ b/src/fr-file-selector-dialog.c
@@ -30,6 +30,10 @@
 #define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
 #define PREF_FILE_SELECTOR_WINDOW_SIZE "window-size"
 #define PREF_FILE_SELECTOR_SHOW_HIDDEN "show-hidden"
+#define PREF_FILE_SELECTOR_SIDEBAR_SIZE "sidebar-size"
+#define FILE_LIST_LINES 45
+#define FILE_LIST_CHARS 60
+#define SIDEBAR_CHARS   12
 
 
 G_DEFINE_TYPE (FrFileSelectorDialog, fr_file_selector_dialog, GTK_TYPE_DIALOG)
@@ -589,43 +593,47 @@ update_places_list (FrFileSelectorDialog *self)
 
 
 /* Taken from the Gtk+ file gtkfilechooserdefault.c
- * Copyright (C) 2003, Red Hat, Inc.  */
+ * Copyright (C) 2003, Red Hat, Inc.
+ *
+ * Guesses a size based upon font sizes */
+static int
+get_font_size (GtkWidget *widget)
+{
+	GtkStyleContext *context;
+	GtkStateFlags    state;
+	int              font_size;
+	GdkScreen       *screen;
+	double           resolution;
+
+	context = gtk_widget_get_style_context (widget);
+	state = gtk_widget_get_state_flags (widget);
+
+	screen = gtk_widget_get_screen (widget);
+	if (screen) {
+		resolution = gdk_screen_get_resolution (screen);
+		if (resolution < 0.0) /* will be -1 if the resolution is not defined in the GdkScreen */
+			resolution = 96.0;
+	}
+	else
+		resolution = 96.0; /* wheeee */
 
+	font_size = pango_font_description_get_size (gtk_style_context_get_font (context, state));
+	font_size = PANGO_PIXELS (font_size) * resolution / 72.0;
 
-#define NUM_LINES 45
-#define NUM_CHARS 60
+	return font_size;
+}
 
 
-/* Guesses a size based upon font sizes */
 static void
-find_good_size_from_style (GtkWidget *widget,
-                           gint      *width,
-                           gint      *height)
+find_good_window_size_from_style (GtkWidget *widget,
+				  int       *width,
+				  int       *height)
 {
-  GtkStyleContext *context;
-  GtkStateFlags state;
-  int font_size;
-  GdkScreen *screen;
-  double resolution;
-
-  context = gtk_widget_get_style_context (widget);
-  state = gtk_widget_get_state_flags (widget);
+	int font_size;
 
-  screen = gtk_widget_get_screen (widget);
-  if (screen)
-    {
-      resolution = gdk_screen_get_resolution (screen);
-      if (resolution < 0.0) /* will be -1 if the resolution is not defined in the GdkScreen */
-        resolution = 96.0;
-    }
-  else
-    resolution = 96.0; /* wheeee */
-
-  font_size = pango_font_description_get_size (gtk_style_context_get_font (context, state));
-  font_size = PANGO_PIXELS (font_size) * resolution / 72.0;
-
-  *width = font_size * NUM_CHARS;
-  *height = font_size * NUM_LINES;
+	font_size = get_font_size (widget);
+	*width = font_size * FILE_LIST_CHARS;
+	*height = font_size * FILE_LIST_LINES;
 }
 
 
@@ -643,7 +651,7 @@ fr_file_selector_dialog_get_default_size (FrFileSelectorDialog *self,
 		return;
 	}
 
-	find_good_size_from_style (GTK_WIDGET (self), default_width, default_height);
+	find_good_window_size_from_style (GTK_WIDGET (self), default_width, default_height);
 
 	if ((self->priv->extra_widget != NULL) && gtk_widget_get_visible (self->priv->extra_widget)) {
 		GtkRequisition req;
@@ -670,6 +678,7 @@ fr_file_selector_dialog_realize (GtkWidget *widget)
 {
 	FrFileSelectorDialog *self;
 	GIcon                *icon;
+	int                   sidebar_size;
 
 	GTK_WIDGET_CLASS (fr_file_selector_dialog_parent_class)->realize (widget);
 
@@ -682,6 +691,11 @@ fr_file_selector_dialog_realize (GtkWidget *widget)
 
 	_fr_file_selector_dialog_update_size (self);
 
+	sidebar_size = g_settings_get_int (self->priv->settings, PREF_FILE_SELECTOR_SIDEBAR_SIZE);
+	if (sidebar_size <= 0)
+		sidebar_size = get_font_size (widget) * SIDEBAR_CHARS;
+		gtk_paned_set_position (GTK_PANED (GET_WIDGET ("main_paned")), sidebar_size);
+
 	update_places_list (self);
 	update_bookmarks (self);
 }
@@ -713,6 +727,9 @@ fr_file_selector_dialog_unmap (GtkWidget *widget)
 	gtk_window_get_size (GTK_WINDOW (self), &width, &height);
 	g_settings_set (self->priv->settings, PREF_FILE_SELECTOR_WINDOW_SIZE, "(ii)", width, height);
 	g_settings_set_boolean (self->priv->settings, PREF_FILE_SELECTOR_SHOW_HIDDEN, self->priv->show_hidden);
+	g_settings_set_int (self->priv->settings,
+			    PREF_FILE_SELECTOR_SIDEBAR_SIZE,
+			    gtk_paned_get_position (GTK_PANED (GET_WIDGET ("main_paned"))));
 
 	if (self->priv->current_operation != NULL)
 		g_cancellable_cancel (self->priv->current_operation->cancellable);
diff --git a/src/ui/file-selector.ui b/src/ui/file-selector.ui
index a113c64..aac3ad1 100644
--- a/src/ui/file-selector.ui
+++ b/src/ui/file-selector.ui
@@ -127,10 +127,9 @@
           </packing>
         </child>
         <child>
-          <object class="GtkPaned" id="paned1">
+          <object class="GtkPaned" id="main_paned">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="position">160</property>
             <child>
               <object class="GtkScrolledWindow" id="scrolledwindow1">
                 <property name="visible">True</property>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]