[gthumb] Fixed the size of the vertical thumbnail pane



commit 0590d86d2feb740f369694ce529434c2954d20e1
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Fri Aug 20 17:25:45 2010 +0200

    Fixed the size of the vertical thumbnail pane
    
    Make the thumbnail pane big enough to avoid to scroll horizontally
    when its orientation is vertical.

 gthumb/gth-file-list.c |   95 ++++++++++++++++++++++++++++++++----------------
 1 files changed, 64 insertions(+), 31 deletions(-)
---
diff --git a/gthumb/gth-file-list.c b/gthumb/gth-file-list.c
index 4db7c05..b7341aa 100644
--- a/gthumb/gth-file-list.c
+++ b/gthumb/gth-file-list.c
@@ -98,6 +98,7 @@ struct _GthFileListPrivateData
 	GtkWidget       *notebook;
 	GtkWidget       *view;
 	GtkWidget       *message;
+	GtkWidget       *scrolled_window;
 	GthIconCache    *icon_cache;
 	GthFileSource   *file_source;
 	gboolean         load_thumbs;
@@ -260,16 +261,59 @@ gth_file_list_finalize (GObject *object)
 
 
 static void
+gth_file_list_size_request (GtkWidget      *widget,
+			    GtkRequisition *requisition)
+{
+	GthFileList *file_list;
+
+	GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition);
+
+	file_list = GTH_FILE_LIST (widget);
+
+	if (file_list->priv->type == GTH_FILE_LIST_TYPE_V_SIDEBAR) {
+		int        xthickness;
+		GtkWidget *vscrollbar;
+
+		xthickness = gtk_widget_get_style (file_list->priv->scrolled_window)->xthickness;
+		requisition->width = file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2) + xthickness * 2;
+
+		vscrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (file_list->priv->scrolled_window));
+		if (gtk_widget_get_visible (vscrollbar)) {
+			GtkRequisition vscrollbar_requisition;
+			int            scrollbar_spacing;
+
+			gtk_widget_size_request (vscrollbar, &vscrollbar_requisition);
+			gtk_widget_style_get (file_list->priv->scrolled_window,
+					      "scrollbar-spacing", &scrollbar_spacing,
+					      NULL);
+			requisition->width += vscrollbar_requisition.width + scrollbar_spacing;
+		}
+	}
+	else if (file_list->priv->type == GTH_FILE_LIST_TYPE_H_SIDEBAR) {
+		int ythickness;
+
+		ythickness = gtk_widget_get_style (file_list->priv->scrolled_window)->ythickness;
+		requisition->height = file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2) + ythickness * 2;
+	}
+}
+
+
+static void
 gth_file_list_class_init (GthFileListClass *class)
 {
-	GObjectClass *object_class;
+	GObjectClass   *object_class;
+	GtkWidgetClass *widget_class;
 
 	parent_class = g_type_class_peek_parent (class);
 
 	object_class = (GObjectClass*) class;
 	object_class->finalize = gth_file_list_finalize;
+
+	widget_class = (GtkWidgetClass*) class;
+	widget_class->size_request = gth_file_list_size_request;
 }
 
+
 static ThumbData *
 thumb_data_new (void)
 {
@@ -530,6 +574,16 @@ checkbox_toggled_cb (GtkCellRendererToggle *cell_renderer,
 
 
 static void
+_gth_file_list_update_orientation (GthFileList *file_list)
+{
+	if (file_list->priv->type == GTH_FILE_LIST_TYPE_V_SIDEBAR)
+		gtk_orientable_set_orientation (GTK_ORIENTABLE (file_list), GTK_ORIENTATION_VERTICAL);
+	else if (file_list->priv->type == GTH_FILE_LIST_TYPE_H_SIDEBAR)
+		gtk_orientable_set_orientation (GTK_ORIENTABLE (file_list), GTK_ORIENTATION_HORIZONTAL);
+}
+
+
+static void
 _gth_file_list_set_type (GthFileList     *file_list,
 		 	 GthFileListType  list_type)
 {
@@ -550,20 +604,7 @@ _gth_file_list_set_type (GthFileList     *file_list,
 		      "fixed_size", (file_list->priv->type == GTH_FILE_LIST_TYPE_H_SIDEBAR) || (file_list->priv->type == GTH_FILE_LIST_TYPE_V_SIDEBAR),
 		      NULL);
 
-	if (file_list->priv->type == GTH_FILE_LIST_TYPE_V_SIDEBAR) {
-		gtk_orientable_set_orientation (GTK_ORIENTABLE (file_list), GTK_ORIENTATION_VERTICAL);
-		gtk_widget_set_size_request (GTK_WIDGET (file_list->priv->view),
-					     file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2),
-					     0);
-	}
-	else if (file_list->priv->type == GTH_FILE_LIST_TYPE_H_SIDEBAR) {
-		gtk_orientable_set_orientation (GTK_ORIENTABLE (file_list), GTK_ORIENTATION_HORIZONTAL);
-		gtk_widget_set_size_request (GTK_WIDGET (file_list->priv->view),
-					     0,
-					     file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2));
-	}
-	else
-		gtk_widget_set_size_request (GTK_WIDGET (file_list->priv->view), 0, 0);
+	_gth_file_list_update_orientation (file_list);
 }
 
 
@@ -572,7 +613,6 @@ gth_file_list_construct (GthFileList     *file_list,
 			 GthFileListType  list_type,
 			 gboolean         enable_drag_drop)
 {
-	GtkWidget       *scrolled;
 	GtkWidget       *viewport;
 	GtkCellRenderer *renderer;
 	GthFileStore    *model;
@@ -603,14 +643,14 @@ gth_file_list_construct (GthFileList     *file_list,
 
 	/* the file view */
 
-	scrolled = gtk_scrolled_window_new (NULL, NULL);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+	file_list->priv->scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (file_list->priv->scrolled_window),
 					GTK_POLICY_NEVER,
 					GTK_POLICY_AUTOMATIC);
-	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled),
+	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (file_list->priv->scrolled_window),
 					     GTK_SHADOW_ETCHED_IN);
 
-	file_list->priv->vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled));
+	file_list->priv->vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (file_list->priv->scrolled_window));
 	g_signal_connect (G_OBJECT (file_list->priv->vadj),
 			  "changed",
 			  G_CALLBACK (vadj_changed_cb),
@@ -710,10 +750,10 @@ gth_file_list_construct (GthFileList     *file_list,
 	/* pack the widgets together */
 
 	gtk_widget_show (file_list->priv->view);
-	gtk_container_add (GTK_CONTAINER (scrolled), file_list->priv->view);
+	gtk_container_add (GTK_CONTAINER (file_list->priv->scrolled_window), file_list->priv->view);
 
-	gtk_widget_show (scrolled);
-	gtk_container_add (GTK_CONTAINER (file_list->priv->notebook), scrolled);
+	gtk_widget_show (file_list->priv->scrolled_window);
+	gtk_container_add (GTK_CONTAINER (file_list->priv->notebook), file_list->priv->scrolled_window);
 
 	gtk_widget_show (file_list->priv->message);
 	gtk_container_add (GTK_CONTAINER (viewport), file_list->priv->message);
@@ -1273,14 +1313,7 @@ gth_file_list_set_thumb_size (GthFileList *file_list,
 		      "wrap-width", file_list->priv->thumb_size + THUMBNAIL_BORDER,
 		      NULL);
 
-	if (file_list->priv->type == GTH_FILE_LIST_TYPE_V_SIDEBAR)
-		gtk_widget_set_size_request (GTK_WIDGET (file_list->priv->view),
-					     file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2),
-					     0);
-	else if (file_list->priv->type == GTH_FILE_LIST_TYPE_H_SIDEBAR)
-		gtk_widget_set_size_request (GTK_WIDGET (file_list->priv->view),
-					     0,
-					     file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2));
+	_gth_file_list_update_orientation (file_list);
 }
 
 



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