[file-roller: 17/26] file selector: save and restore the sidebar size, set a good default value as well
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [file-roller: 17/26] file selector: save and restore the sidebar size, set a good default value as well
- Date: Thu, 9 Aug 2012 20:19:26 +0000 (UTC)
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]