[nautilus] Enable scaling of icons on desktop only (#589295)



commit 2b107d37a85ff03f84ecb63bb0b356dac43261f0
Author: Marcus Carlson <mdc src gnome org>
Date:   Mon Aug 9 21:50:42 2010 +0200

    Enable scaling of icons on desktop only (#589295)

 src/file-manager/fm-desktop-icon-view.c |    8 +++++
 src/file-manager/fm-icon-view.c         |   51 +++++++++++++++++++++++++------
 src/file-manager/fm-icon-view.h         |    6 ++++
 3 files changed, 55 insertions(+), 10 deletions(-)
---
diff --git a/src/file-manager/fm-desktop-icon-view.c b/src/file-manager/fm-desktop-icon-view.c
index 9864cbd..8f1b750 100644
--- a/src/file-manager/fm-desktop-icon-view.c
+++ b/src/file-manager/fm-desktop-icon-view.c
@@ -84,6 +84,7 @@ static void     fm_desktop_icon_view_init                   (FMDesktopIconView
 static void     fm_desktop_icon_view_class_init             (FMDesktopIconViewClass *klass);
 static void     default_zoom_level_changed                        (gpointer                user_data);
 static gboolean real_supports_auto_layout                         (FMIconView             *view);
+static gboolean real_supports_scaling	                          (FMIconView             *view);
 static gboolean real_supports_keep_aligned                        (FMIconView             *view);
 static gboolean real_supports_labels_beside_icons                 (FMIconView             *view);
 static void     real_merge_menus                                  (FMDirectoryView        *view);
@@ -318,6 +319,7 @@ fm_desktop_icon_view_class_init (FMDesktopIconViewClass *class)
 	FM_DIRECTORY_VIEW_CLASS (class)->supports_zooming = real_supports_zooming;
 
 	FM_ICON_VIEW_CLASS (class)->supports_auto_layout = real_supports_auto_layout;
+	FM_ICON_VIEW_CLASS (class)->supports_scaling = real_supports_scaling;
 	FM_ICON_VIEW_CLASS (class)->supports_keep_aligned = real_supports_keep_aligned;
 	FM_ICON_VIEW_CLASS (class)->supports_labels_beside_icons = real_supports_labels_beside_icons;
 }
@@ -786,6 +788,12 @@ real_supports_auto_layout (FMIconView *view)
 }
 
 static gboolean
+real_supports_scaling (FMIconView *view)
+{
+	return TRUE;
+}
+
+static gboolean
 real_supports_keep_aligned (FMIconView *view)
 {
 	return TRUE;
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index 0780593..6e5cb3d 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -169,7 +169,8 @@ static void                 fm_icon_view_update_click_mode            (FMIconVie
 static void                 fm_icon_view_set_directory_tighter_layout (FMIconView           *icon_view,
 								       NautilusFile         *file,
 								       gboolean              tighter_layout);
-static gboolean              fm_icon_view_supports_manual_layout      (FMIconView           *icon_view);
+static gboolean             fm_icon_view_supports_manual_layout       (FMIconView           *icon_view);
+static gboolean             fm_icon_view_supports_scaling	      (FMIconView           *icon_view);
 static void                 fm_icon_view_reveal_selection             (FMDirectoryView      *view);
 static const SortCriterion *get_sort_criterion_by_sort_type           (NautilusFileSortType  sort_type);
 static void                 set_sort_criterion_by_sort_type           (FMIconView           *icon_view,
@@ -295,15 +296,20 @@ get_stored_icon_position_callback (NautilusIconContainer *container,
 
 	/* If it is the desktop directory, maybe the gnome-libs metadata has information about it */
 
-	/* Get the scale of the icon from the metadata. */
-	scale_string = nautilus_file_get_metadata
-		(file, NAUTILUS_METADATA_KEY_ICON_SCALE, "1");
-	position->scale = g_ascii_strtod (scale_string, NULL);
-	if (errno != 0) {
- 		position->scale = 1.0;
- 	}
+	/* Disable scaling if not on the desktop */
+	if (fm_icon_view_supports_scaling (icon_view)) {
+		/* Get the scale of the icon from the metadata. */
+		scale_string = nautilus_file_get_metadata
+			(file, NAUTILUS_METADATA_KEY_ICON_SCALE, "1");
+		position->scale = g_ascii_strtod (scale_string, NULL);
+		if (errno != 0) {
+			position->scale = 1.0;
+		}
 
-	g_free (scale_string);
+		g_free (scale_string);
+	} else {
+		position->scale = 1.0;
+	}
 	
 	return position_good;
 }
@@ -638,6 +644,16 @@ fm_icon_view_supports_auto_layout (FMIconView *view)
 }
 
 static gboolean
+fm_icon_view_supports_scaling (FMIconView *view)
+{
+	g_return_val_if_fail (FM_IS_ICON_VIEW (view), FALSE);
+
+	return EEL_CALL_METHOD_WITH_RETURN_VALUE
+		(FM_ICON_VIEW_CLASS, view,
+		 supports_scaling, (view));
+}
+
+static gboolean
 fm_icon_view_supports_manual_layout (FMIconView *view)
 {
 	g_return_val_if_fail (FM_IS_ICON_VIEW (view), FALSE);
@@ -1047,6 +1063,14 @@ real_supports_auto_layout (FMIconView *view)
 }
 
 static gboolean
+real_supports_scaling (FMIconView *view)
+{
+	g_return_val_if_fail (FM_IS_ICON_VIEW (view), FALSE);
+
+	return FALSE;
+}
+
+static gboolean
 real_supports_manual_layout (FMIconView *view)
 {
 	g_return_val_if_fail (FM_IS_ICON_VIEW (view), FALSE);
@@ -1696,7 +1720,7 @@ fm_icon_view_merge_menus (FMDirectoryView *view)
 		gtk_action_set_visible (action, FALSE);
 	}
 
-	if (FM_IS_DESKTOP_ICON_VIEW (icon_view)) {
+	if (fm_icon_view_supports_scaling (icon_view)) {
 		gtk_ui_manager_add_ui (ui_manager,
 				       icon_view->details->icon_merge_id,
 				       POPUP_PATH_ICON_APPEARANCE,
@@ -1759,6 +1783,9 @@ fm_icon_view_update_menus (FMDirectoryView *view)
 				  && icon_container != NULL
 				  && !nautilus_icon_container_has_stretch_handles (icon_container));
 
+	gtk_action_set_visible (action,
+				fm_icon_view_supports_scaling (icon_view));
+
 	action = gtk_action_group_get_action (icon_view->details->icon_action_group,
 					      FM_ACTION_UNSTRETCH);
 	g_object_set (action, "label",
@@ -1770,6 +1797,9 @@ fm_icon_view_update_menus (FMDirectoryView *view)
 				  icon_container != NULL
 				  && nautilus_icon_container_is_stretched (icon_container));
 
+	gtk_action_set_visible (action,
+				fm_icon_view_supports_scaling (icon_view));
+
 	nautilus_file_list_free (selection);
 
 	editable = fm_directory_view_is_editable (view);
@@ -2970,6 +3000,7 @@ fm_icon_view_class_init (FMIconViewClass *klass)
 
 	klass->clean_up = fm_icon_view_real_clean_up;
 	klass->supports_auto_layout = real_supports_auto_layout;
+	klass->supports_scaling = real_supports_scaling;
 	klass->supports_manual_layout = real_supports_manual_layout;
 	klass->supports_keep_aligned = real_supports_keep_aligned;
 	klass->supports_labels_beside_icons = real_supports_labels_beside_icons;
diff --git a/src/file-manager/fm-icon-view.h b/src/file-manager/fm-icon-view.h
index 331e296..ec418e8 100644
--- a/src/file-manager/fm-icon-view.h
+++ b/src/file-manager/fm-icon-view.h
@@ -100,6 +100,12 @@ struct FMIconViewClass {
 	 */
 	gboolean (* supports_manual_layout)	 (FMIconView *view);
 
+	/* supports_scaling is a function pointer that subclasses may
+	 * override to control whether or not the manual layout supports
+	 * scaling. The default implementation returns FALSE
+	 */
+	gboolean (* supports_scaling)	 (FMIconView *view);
+
 	/* supports_auto_layout is a function pointer that subclasses may
 	 * override to control whether snap-to-grid mode
 	 * should be enabled. The default implementation returns FALSE.



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