[gthumb] save and restore the thumbnail list size
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] save and restore the thumbnail list size
- Date: Fri, 7 Dec 2012 20:09:50 +0000 (UTC)
commit c10105a26e978140cbb44348d93d1a7ea0851ba5
Author: Paolo Bacchilega <paobac src gnome org>
Date: Fri Dec 7 20:45:03 2012 +0100
save and restore the thumbnail list size
[new feature]
data/org.gnome.gthumb.gschema.xml.in | 3 +
gthumb/Makefile.am | 2 +
gthumb/gth-browser.c | 27 +++++-
gthumb/gth-paned.c | 178 ++++++++++++++++++++++++++++++++++
gthumb/gth-paned.h | 57 +++++++++++
gthumb/gth-preferences.h | 1 +
gthumb/gtk-utils.c | 40 +-------
gthumb/gtk-utils.h | 2 -
8 files changed, 271 insertions(+), 39 deletions(-)
---
diff --git a/data/org.gnome.gthumb.gschema.xml.in b/data/org.gnome.gthumb.gschema.xml.in
index 89fea70..adf6787 100644
--- a/data/org.gnome.gthumb.gschema.xml.in
+++ b/data/org.gnome.gthumb.gschema.xml.in
@@ -125,6 +125,9 @@
<key name="thumbnail-list-visible" type="b">
<default>true</default>
</key>
+ <key name="thumbnail-list-size" type="i">
+ <default>0</default>
+ </key>
<key name="browser-sidebar-width" type="i">
<default>285</default>
</key>
diff --git a/gthumb/Makefile.am b/gthumb/Makefile.am
index 758fac3..4b93d3e 100644
--- a/gthumb/Makefile.am
+++ b/gthumb/Makefile.am
@@ -88,6 +88,7 @@ PUBLIC_HEADER_FILES = \
gth-monitor.h \
gth-multipage.h \
gth-overwrite-dialog.h \
+ gth-paned.h \
gth-preferences.h \
gth-progress-dialog.h \
gth-request-dialog.h \
@@ -227,6 +228,7 @@ gthumb_SOURCES = \
gth-monitor.c \
gth-multipage.c \
gth-overwrite-dialog.c \
+ gth-paned.c \
gth-preferences.c \
gth-progress-dialog.c \
gth-request-dialog.c \
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 2edcd43..93f3855 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -50,6 +50,7 @@
#include "gth-marshal.h"
#include "gth-menu-action.h"
#include "gth-metadata-provider.h"
+#include "gth-paned.h"
#include "gth-preferences.h"
#include "gth-progress-dialog.h"
#include "gth-sidebar.h"
@@ -2227,6 +2228,22 @@ _gth_browser_close_final_step (gpointer user_data)
if (allocation.width > MIN_SIDEBAR_SIZE)
g_settings_set_int (browser->priv->browser_settings, PREF_BROWSER_VIEWER_SIDEBAR_WIDTH, allocation.width);
+ switch (gth_file_list_get_mode (GTH_FILE_LIST (browser->priv->thumbnail_list))) {
+ case GTH_FILE_LIST_MODE_H_SIDEBAR:
+ g_settings_set_int (browser->priv->browser_settings,
+ PREF_BROWSER_THUMBNAIL_LIST_SIZE,
+ _gtk_paned_get_position2 (GTK_PANED (browser->priv->viewer_thumbnails_pane)));
+ break;
+ case GTH_FILE_LIST_MODE_V_SIDEBAR:
+ g_settings_set_int (browser->priv->browser_settings,
+ PREF_BROWSER_THUMBNAIL_LIST_SIZE,
+ gtk_paned_get_position (GTK_PANED (browser->priv->viewer_thumbnails_pane)));
+ break;
+ default:
+ g_warning ("Wrong thumbnail list mode");
+ break;
+ }
+
g_settings_set_enum (browser->priv->browser_settings, PREF_BROWSER_VIEWER_SIDEBAR, browser->priv->viewer_sidebar);
}
@@ -4371,17 +4388,21 @@ gth_browser_init (GthBrowser *browser)
gtk_paned_pack1 (GTK_PANED (browser->priv->viewer_sidebar_pane), browser->priv->viewer_container, TRUE, FALSE);
browser->priv->viewer_sidebar_alignment = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
- _gtk_paned_set_position2 (GTK_PANED (browser->priv->viewer_sidebar_pane), g_settings_get_int (browser->priv->browser_settings, PREF_BROWSER_BROWSER_SIDEBAR_WIDTH));
+ gth_paned_set_position2 (GTH_PANED (browser->priv->viewer_sidebar_pane), g_settings_get_int (browser->priv->browser_settings, PREF_BROWSER_BROWSER_SIDEBAR_WIDTH));
gtk_paned_pack2 (GTK_PANED (browser->priv->viewer_sidebar_pane), browser->priv->viewer_sidebar_alignment, FALSE, FALSE);
browser->priv->thumbnail_list = gth_file_list_new (gth_grid_view_new (), (viewer_thumbnails_orientation == GTK_ORIENTATION_HORIZONTAL) ? GTH_FILE_LIST_MODE_H_SIDEBAR : GTH_FILE_LIST_MODE_V_SIDEBAR, TRUE);
gth_file_list_set_caption (GTH_FILE_LIST (browser->priv->thumbnail_list), "none");
gth_grid_view_set_cell_spacing (GTH_GRID_VIEW (gth_file_list_get_view (GTH_FILE_LIST (browser->priv->thumbnail_list))), 0);
gth_file_list_set_thumb_size (GTH_FILE_LIST (browser->priv->thumbnail_list), 95);
- if (viewer_thumbnails_orientation == GTK_ORIENTATION_HORIZONTAL)
+ if (viewer_thumbnails_orientation == GTK_ORIENTATION_HORIZONTAL) {
+ gth_paned_set_position2 (GTH_PANED (browser->priv->viewer_thumbnails_pane), g_settings_get_int (browser->priv->browser_settings, PREF_BROWSER_THUMBNAIL_LIST_SIZE));
gtk_paned_pack2 (GTK_PANED (browser->priv->viewer_thumbnails_pane), browser->priv->thumbnail_list, FALSE, FALSE);
- else
+ }
+ else {
+ gtk_paned_set_position (GTK_PANED (browser->priv->viewer_thumbnails_pane), g_settings_get_int (browser->priv->browser_settings, PREF_BROWSER_THUMBNAIL_LIST_SIZE));
gtk_paned_pack1 (GTK_PANED (browser->priv->viewer_thumbnails_pane), browser->priv->thumbnail_list, FALSE, FALSE);
+ }
_gth_browser_set_thumbnail_list_visibility (browser, g_settings_get_boolean (browser->priv->browser_settings, PREF_BROWSER_THUMBNAIL_LIST_VISIBLE));
g_signal_connect (gth_file_list_get_view (GTH_FILE_LIST (browser->priv->thumbnail_list)),
diff --git a/gthumb/gth-paned.c b/gthumb/gth-paned.c
new file mode 100644
index 0000000..58a1de6
--- /dev/null
+++ b/gthumb/gth-paned.c
@@ -0,0 +1,178 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ * GThumb
+ *
+ * Copyright (C) 2012 The Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <gtk/gtk.h>
+#include "gth-paned.h"
+
+
+G_DEFINE_TYPE (GthPaned, gth_paned, GTK_TYPE_PANED)
+
+
+enum {
+ PROP_0,
+ PROP_POSITION2
+};
+
+
+struct _GthPanedPrivate {
+ int child2_size;
+ gboolean position2_set;
+};
+
+
+static void
+gth_paned_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ GthPaned *self;
+
+ self = GTH_PANED (widget);
+
+ if (self->priv->position2_set) {
+ self->priv->position2_set = FALSE;
+ switch (gtk_orientable_get_orientation (GTK_ORIENTABLE (widget))) {
+ case GTK_ORIENTATION_HORIZONTAL:
+ gtk_paned_set_position (GTK_PANED (self), allocation->width - self->priv->child2_size);
+ break;
+ case GTK_ORIENTATION_VERTICAL:
+ gtk_paned_set_position (GTK_PANED (self), allocation->height - self->priv->child2_size);
+ break;
+ }
+ }
+
+ GTK_WIDGET_CLASS (gth_paned_parent_class)->size_allocate (widget, allocation);
+}
+
+
+static void
+gth_paned_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GthPaned *self;
+
+ self = GTH_PANED (object);
+
+ switch (prop_id) {
+ case PROP_POSITION2:
+ gth_paned_set_position2 (self, g_value_get_int (value));
+ break;
+ default:
+ break;
+ }
+}
+
+
+static void
+gth_paned_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GthPaned *self;
+
+ self = GTH_PANED (object);
+
+ switch (prop_id) {
+ case PROP_POSITION2:
+ g_value_set_int (value, self->priv->child2_size);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void
+gth_paned_class_init (GthPanedClass *paned_class)
+{
+ GObjectClass *gobject_class;
+ GtkWidgetClass *widget_class;
+
+ g_type_class_add_private (paned_class, sizeof (GthPanedPrivate));
+
+ gobject_class = (GObjectClass*) paned_class;
+ gobject_class->set_property = gth_paned_set_property;
+ gobject_class->get_property = gth_paned_get_property;
+
+ widget_class = (GtkWidgetClass*) paned_class;
+ widget_class->size_allocate = gth_paned_size_allocate;
+
+ /* Properties */
+
+ g_object_class_install_property (gobject_class,
+ PROP_POSITION2,
+ g_param_spec_int ("position2",
+ "Position 2",
+ "Position starting from the end",
+ 0,
+ G_MAXINT32,
+ 0,
+ G_PARAM_READWRITE));
+}
+
+
+static void
+gth_paned_init (GthPaned *self)
+{
+ gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE);
+
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_PANED, GthPanedPrivate);
+ self->priv->position2_set = FALSE;
+ self->priv->child2_size = 0;
+}
+
+
+GtkWidget *
+gth_paned_new (GtkOrientation orientation)
+{
+ return g_object_new (GTH_TYPE_PANED, "orientation", orientation, NULL);
+}
+
+
+void
+gth_paned_set_position2 (GthPaned *self,
+ int position)
+{
+ g_return_if_fail (GTH_IS_PANED (self));
+
+ if (position >= 0) {
+ self->priv->child2_size = position;
+ self->priv->position2_set = TRUE;
+ }
+ else
+ self->priv->position2_set = FALSE;
+
+ g_object_notify (G_OBJECT (self), "position2");
+ gtk_widget_queue_resize_no_redraw (GTK_WIDGET (self));
+}
+
+
+int
+gth_paned_get_position2 (GthPaned *self)
+{
+ g_return_val_if_fail (GTH_IS_PANED (self), 0);
+
+ return self->priv->child2_size;
+}
diff --git a/gthumb/gth-paned.h b/gthumb/gth-paned.h
new file mode 100644
index 0000000..e8e12e0
--- /dev/null
+++ b/gthumb/gth-paned.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ * GThumb
+ *
+ * Copyright (C) 2012 The Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GTH_PANED_H
+#define GTH_PANED_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GTH_TYPE_PANED (gth_paned_get_type ())
+#define GTH_PANED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_PANED, GthPaned))
+#define GTH_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTH_TYPE_PANED, GthPanedClass))
+#define GTH_IS_PANED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_PANED))
+#define GTH_IS_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTH_TYPE_PANED))
+#define GTH_PANED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTH_TYPE_PANED, GthPanedClass))
+
+typedef struct _GthPaned GthPaned;
+typedef struct _GthPanedClass GthPanedClass;
+typedef struct _GthPanedPrivate GthPanedPrivate;
+
+struct _GthPaned {
+ GtkPaned __parent;
+ GthPanedPrivate *priv;
+};
+
+struct _GthPanedClass {
+ GtkPanedClass __parent_class;
+};
+
+GType gth_paned_get_type (void);
+GtkWidget * gth_paned_new (GtkOrientation orientation);
+void gth_paned_set_position2 (GthPaned *paned,
+ int position);
+int gth_paned_get_position2 (GthPaned *paned);
+
+G_END_DECLS
+
+#endif /* GTH_PANED_H */
diff --git a/gthumb/gth-preferences.h b/gthumb/gth-preferences.h
index 2db8dd5..68e6eff 100644
--- a/gthumb/gth-preferences.h
+++ b/gthumb/gth-preferences.h
@@ -76,6 +76,7 @@ G_BEGIN_DECLS
#define PREF_BROWSER_PROPERTIES_VISIBLE "properties-visible"
#define PREF_BROWSER_PROPERTIES_ON_THE_RIGHT "properties-on-the-right"
#define PREF_BROWSER_THUMBNAIL_LIST_VISIBLE "thumbnail-list-visible"
+#define PREF_BROWSER_THUMBNAIL_LIST_SIZE "thumbnail-list-size"
#define PREF_BROWSER_BROWSER_SIDEBAR_WIDTH "browser-sidebar-width"
#define PREF_BROWSER_VIEWER_SIDEBAR "viewer-sidebar"
#define PREF_BROWSER_VIEWER_SIDEBAR_WIDTH "viewer-sidebar-width"
diff --git a/gthumb/gtk-utils.c b/gthumb/gtk-utils.c
index e907b2f..be0e460 100644
--- a/gthumb/gtk-utils.c
+++ b/gthumb/gtk-utils.c
@@ -761,10 +761,9 @@ _gtk_tree_path_list_free (GList *list)
int
_gtk_paned_get_position2 (GtkPaned *paned)
{
- int pos;
- GtkWidget *w;
- GtkRequisition requisition;
- int size;
+ int pos;
+ GtkAllocation allocation;
+ int size;
if (! gtk_widget_get_visible (GTK_WIDGET (paned)))
return 0;
@@ -773,15 +772,11 @@ _gtk_paned_get_position2 (GtkPaned *paned)
if (pos == 0)
return 0;
- w = gtk_widget_get_toplevel (GTK_WIDGET (paned));
- if (! gtk_widget_is_toplevel (w))
- return 0;
-
- gtk_window_get_size (GTK_WINDOW (w), &(requisition.width), &(requisition.height));
+ gtk_widget_get_allocation (GTK_WIDGET (paned), &allocation);
if (gtk_orientable_get_orientation (GTK_ORIENTABLE (paned)) == GTK_ORIENTATION_HORIZONTAL)
- size = requisition.width;
+ size = allocation.width;
else
- size = requisition.height;
+ size = allocation.height;
if (size == 0)
return 0;
@@ -791,29 +786,6 @@ _gtk_paned_get_position2 (GtkPaned *paned)
void
-_gtk_paned_set_position2 (GtkPaned *paned,
- int pos)
-{
- GtkWidget *top_level;
- GtkAllocation allocation;
- int size;
-
- top_level = gtk_widget_get_toplevel (GTK_WIDGET (paned));
- if (! gtk_widget_is_toplevel (top_level))
- return;
-
- gtk_widget_get_allocation (top_level, &allocation);
- if (gtk_orientable_get_orientation (GTK_ORIENTABLE (paned)) == GTK_ORIENTATION_HORIZONTAL)
- size = allocation.width;
- else
- size = allocation.height;
-
- if (pos > 0)
- gtk_paned_set_position (paned, size - pos);
-}
-
-
-void
_g_launch_command (GtkWidget *parent,
const char *command,
const char *name,
diff --git a/gthumb/gtk-utils.h b/gthumb/gtk-utils.h
index d6987ab..f7573fd 100644
--- a/gthumb/gtk-utils.h
+++ b/gthumb/gtk-utils.h
@@ -114,8 +114,6 @@ int _gtk_widget_lookup_for_size (GtkWidget *wi
GtkIconSize icon_size);
void _gtk_tree_path_list_free (GList *list);
int _gtk_paned_get_position2 (GtkPaned *paned);
-void _gtk_paned_set_position2 (GtkPaned *paned,
- int pos);
void _g_launch_command (GtkWidget *parent,
const char *command,
const char *name,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]