diff --git a/gresources/nemo-desktop-overlay.glade b/gresources/nemo-desktop-overlay.glade index 93678fbb1..e7dde59f4 100644 --- a/gresources/nemo-desktop-overlay.glade +++ b/gresources/nemo-desktop-overlay.glade @@ -25,6 +25,13 @@ 10 10 + + 50 + 200 + 100 + 0.10 + 1 + True False @@ -238,6 +245,52 @@ 0 + + + True + False + 10 + True + + + True + False + start + Icon Label Width Scale + Scales the width of the desktop icon label + + + + + + True + True + 0 + + + + + True + True + adjustment_label_width + False + False + False + + + + False + True + 1 + + + + + False + True + 1 + + True @@ -251,7 +304,7 @@ False True - 1 + 2 @@ -656,7 +709,7 @@ False True - 2 + 3 diff --git a/libnemo-private/nemo-file.c b/libnemo-private/nemo-file.c index 63ffcc2b2..4c87bb64a 100644 --- a/libnemo-private/nemo-file.c +++ b/libnemo-private/nemo-file.c @@ -70,6 +70,7 @@ #include #include #include +#include #ifdef HAVE_SELINUX #include @@ -3949,6 +3950,50 @@ nemo_file_get_desktop_grid_adjusts (NemoFile *file, } } +void +nemo_file_set_desktop_label_scale_adjust (NemoFile *file, + const char *key, + double double_a) +{ + g_return_if_fail (NEMO_IS_FILE (file)); + g_return_if_fail (key != NULL); + g_return_if_fail (key[0] != '\0'); + + /* double_a is a single decimal point value in the range [50.0, 200.0] */ + /* to preserve this value multiple by 10 */ + /* then use floorf to get the integer part */ + int value = (int)floorf(double_a * 10); + + /* 1000 is 100.0 - the default value of no scaling */ + nemo_file_set_integer_metadata (file, key, 1000, value); +} + +void +nemo_file_get_desktop_label_scale_adjust (NemoFile *file, + const char *key, + double *double_a) +{ + char c; + double result; + + g_return_if_fail (key != NULL); + g_return_if_fail (key[0] != '\0'); + + if (file == NULL || + file->details->metadata == NULL) { + return; + } + + g_return_if_fail (NEMO_IS_FILE (file)); + + /* 1000 is 100.0 - the default value of no scaling */ + int value = nemo_file_get_integer_metadata (file, key, 1000); + + if (double_a) { + *double_a = value / 10.0; + } +} + gboolean nemo_file_get_boolean_metadata (NemoFile *file, const char *key, diff --git a/libnemo-private/nemo-file.h b/libnemo-private/nemo-file.h index ae2598048..9e23adfa3 100644 --- a/libnemo-private/nemo-file.h +++ b/libnemo-private/nemo-file.h @@ -386,6 +386,12 @@ void nemo_file_get_desktop_grid_adjusts (NemoFile *file, const char *key, int *int_a, int *int_b); +void nemo_file_set_desktop_label_scale_adjust (NemoFile *file, + const char *key, + double double_a); +void nemo_file_get_desktop_label_scale_adjust (NemoFile *file, + const char *key, + double *double_a); /* Covers for common data types. */ gboolean nemo_file_get_boolean_metadata (NemoFile *file, const char *key, diff --git a/libnemo-private/nemo-icon-canvas-item.c b/libnemo-private/nemo-icon-canvas-item.c index e390c9495..e9fcb2aa2 100644 --- a/libnemo-private/nemo-icon-canvas-item.c +++ b/libnemo-private/nemo-icon-canvas-item.c @@ -821,10 +821,22 @@ static void prepare_pango_layout_width (NemoIconCanvasItem *item, PangoLayout *layout) { + NemoIconContainer *container; + int width; + if (nemo_icon_canvas_item_get_max_text_width (item) < 0) { pango_layout_set_width (layout, -1); } else { - pango_layout_set_width (layout, floor (nemo_icon_canvas_item_get_max_text_width (item)) * PANGO_SCALE); + width = floor (nemo_icon_canvas_item_get_max_text_width (item)); + + container = NEMO_ICON_CONTAINER (EEL_CANVAS_ITEM (item)->canvas); + + /* check if the container is_desktop? */ + if (!IS_COMPACT_VIEW (container) && width % 2 != 0) { + width += 1; + } + + pango_layout_set_width (layout, width * PANGO_SCALE); pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_END); } } @@ -970,6 +982,12 @@ measure_label_text (NemoIconCanvasItem *item) details->text_dx = additional_dx; } + /* check if the container is_desktop? */ + if (!IS_COMPACT_VIEW (container) && details->text_width % 2 != 0) { + details->text_width += 1; + details->text_dx += 1; + } + if (have_additional) { details->text_height = editable_height + LABEL_LINE_SPACING + additional_height; details->text_height_for_layout = editable_height_for_layout + LABEL_LINE_SPACING + additional_height; @@ -1053,6 +1071,11 @@ draw_label_text (NemoIconCanvasItem *item, max_text_width = floor (nemo_icon_canvas_item_get_max_text_width (item)); + /* check if the container is_desktop? */ + if (!IS_COMPACT_VIEW (container) && max_text_width % 2 != 0) { + max_text_width += 1; + } + base_state = gtk_widget_get_state_flags (GTK_WIDGET (container)); base_state &= ~(GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_PRELIGHT); @@ -1525,7 +1548,6 @@ nemo_icon_canvas_item_event (EelCanvasItem *item, GdkEvent *event) icon_item = NEMO_ICON_CANVAS_ITEM (item); cursor_window = ((GdkEventAny *)event)->window; - if (event->type == GDK_ENTER_NOTIFY) { nemo_icon_container_update_tooltip_text (NEMO_ICON_CONTAINER (item->canvas), icon_item); if (!icon_item->details->is_prelit) { @@ -2008,7 +2030,11 @@ nemo_icon_canvas_item_get_max_text_width (NemoIconCanvasItem *item) } else { /* normal icon view */ if (container->details->is_desktop) { - return nemo_get_desktop_text_width_for_zoom_level (nemo_icon_container_get_zoom_level (container)); + return nemo_get_desktop_text_width_for_zoom_level (nemo_icon_container_get_zoom_level (container)) + /* apply desktop icon label width scaling */ + * (container->details->label_scale_adjust / 100.0) + /* see measure_label_text(): extra to make it look nicer */ + - (TEXT_BACK_PADDING_X * 2); } else { return nemo_get_icon_text_width_for_zoom_level (nemo_icon_container_get_zoom_level (container)); } diff --git a/libnemo-private/nemo-icon-container.c b/libnemo-private/nemo-icon-container.c index e35283290..2c30da35b 100644 --- a/libnemo-private/nemo-icon-container.c +++ b/libnemo-private/nemo-icon-container.c @@ -5007,6 +5007,7 @@ nemo_icon_container_init (NemoIconContainer *container) details->h_adjust = 100; details->v_adjust = 100; + details->label_scale_adjust = 100; } typedef struct { @@ -6671,6 +6672,16 @@ nemo_icon_container_set_grid_adjusts (NemoIconContainer *container, container->details->v_adjust = v_adjust; } +void +nemo_icon_container_set_label_scale_adjust (NemoIconContainer *container, + double label_scale_adjust) +{ + g_return_if_fail (NEMO_IS_ICON_CONTAINER (container)); + + container->details->label_scale_adjust = label_scale_adjust; + +} + gboolean nemo_icon_container_is_keep_aligned (NemoIconContainer *container) { diff --git a/libnemo-private/nemo-icon-container.h b/libnemo-private/nemo-icon-container.h index de1805a7f..122db9d5f 100644 --- a/libnemo-private/nemo-icon-container.h +++ b/libnemo-private/nemo-icon-container.h @@ -287,6 +287,8 @@ gboolean nemo_icon_container_get_horizontal_layout (NemoIconContainer * void nemo_icon_container_set_grid_adjusts (NemoIconContainer *container, gint h_adjust, gint v_adjust); +void nemo_icon_container_set_label_scale_adjust (NemoIconContainer *container, + double label_scale_adjust); void nemo_icon_container_set_label_position (NemoIconContainer *container, NemoIconLabelPosition pos); diff --git a/libnemo-private/nemo-icon-private.h b/libnemo-private/nemo-icon-private.h index 2d74ca7fb..c5933d8e4 100644 --- a/libnemo-private/nemo-icon-private.h +++ b/libnemo-private/nemo-icon-private.h @@ -257,6 +257,7 @@ struct NemoIconContainerDetails { gboolean horizontal; gint h_adjust; gint v_adjust; + double label_scale_adjust; gboolean show_desktop_tooltips; gboolean show_icon_view_tooltips; diff --git a/libnemo-private/nemo-metadata.c b/libnemo-private/nemo-metadata.c index c31231c03..64cbaa7d6 100644 --- a/libnemo-private/nemo-metadata.c +++ b/libnemo-private/nemo-metadata.c @@ -63,6 +63,7 @@ static char *used_metadata_names[] = { (char *)NEMO_METADATA_KEY_PINNED, (char *)NEMO_METADATA_KEY_FAVORITE, (char *)NEMO_METADATA_KEY_FAVORITE_AVAILABLE, + (char *)NEMO_METADATA_KEY_DESKTOP_LABEL_SACLE_ADJUST, NULL }; diff --git a/libnemo-private/nemo-metadata.h b/libnemo-private/nemo-metadata.h index da4142fa1..994efe236 100644 --- a/libnemo-private/nemo-metadata.h +++ b/libnemo-private/nemo-metadata.h @@ -78,6 +78,7 @@ #define NEMO_METADATA_KEY_DESKTOP_GRID_HORIZONTAL "desktop-horizontal" #define NEMO_METADATA_KEY_SHOW_THUMBNAILS "show-thumbnails" #define NEMO_METADATA_KEY_DESKTOP_GRID_ADJUST "desktop-grid-adjust" +#define NEMO_METADATA_KEY_DESKTOP_LABEL_SACLE_ADJUST "desktop-label-scale-adjust" #define NEMO_METADATA_KEY_PINNED "pinned-to-top" #define NEMO_METADATA_KEY_FAVORITE "xapp-favorite" diff --git a/src/nemo-desktop-icon-grid-view.c b/src/nemo-desktop-icon-grid-view.c index 4a263e185..c80b75dc6 100644 --- a/src/nemo-desktop-icon-grid-view.c +++ b/src/nemo-desktop-icon-grid-view.c @@ -1259,3 +1259,36 @@ nemo_desktop_icon_grid_view_set_grid_adjusts (NemoDesktopIconGridView *view, nemo_icon_container_store_layout_timestamps_now (get_icon_container (view)); } + +void +nemo_desktop_icon_grid_view_set_label_scale_adjust (NemoDesktopIconGridView *view, + double label_scale_adjust) +{ + NemoIconContainer *container; + NemoFile *file; + + if (view->details->updating_menus) { + return; + } + + container = get_icon_container (view); + clear_orphan_states (view); + + file = nemo_view_get_directory_as_file (NEMO_VIEW (view)); + + nemo_icon_container_set_label_scale_adjust (container, label_scale_adjust); + + container->details->needs_resort = TRUE; + container->details->auto_layout = TRUE; + + nemo_icon_view_set_directory_label_scale_adjust (NEMO_ICON_VIEW (view), + file, + label_scale_adjust); + + nemo_icon_container_redo_layout (container); + + nemo_view_update_menus (NEMO_VIEW (view)); + + nemo_icon_container_store_layout_timestamps_now (get_icon_container (view)); + +} diff --git a/src/nemo-desktop-icon-grid-view.h b/src/nemo-desktop-icon-grid-view.h index 1c4cfa01b..d6ffbda07 100644 --- a/src/nemo-desktop-icon-grid-view.h +++ b/src/nemo-desktop-icon-grid-view.h @@ -56,5 +56,7 @@ GtkActionGroup *nemo_desktop_icon_grid_view_get_action_group (NemoDesktopIconGri void nemo_desktop_icon_grid_view_set_grid_adjusts (NemoDesktopIconGridView *view, gint h_adjust, gint v_adjust); +void nemo_desktop_icon_grid_view_set_label_scale_adjust (NemoDesktopIconGridView *view, + double label_scale_adjust); #endif /* NEMO_DESKTOP_ICON_GRID_VIEW_H */ diff --git a/src/nemo-desktop-manager.c b/src/nemo-desktop-manager.c index a508987b5..978af6824 100644 --- a/src/nemo-desktop-manager.c +++ b/src/nemo-desktop-manager.c @@ -536,6 +536,18 @@ on_overlay_adjustments_changed (NemoDesktopOverlay *overlay, v_percent); } +static void +on_overlay_label_scale_changed (NemoDesktopOverlay *overlay, + NemoWindow *window, + double label_scale, + NemoDesktopManager *manager) +{ + g_return_if_fail (NEMO_IS_DESKTOP_WINDOW (window)); + + nemo_desktop_window_set_label_scale_adjust (NEMO_DESKTOP_WINDOW (window), + label_scale); +} + static void on_proxy_signal (GDBusProxy *proxy, gchar *sender, @@ -950,7 +962,8 @@ nemo_desktop_manager_get_overlay_info (NemoDesktopManager *manager, gint monitor, GtkActionGroup **action_group, gint *h_adjust, - gint *v_adjust) + gint *v_adjust, + double *label_scale_adjust) { GtkWindow *window; @@ -959,7 +972,9 @@ nemo_desktop_manager_get_overlay_info (NemoDesktopManager *manager, if (NEMO_IS_DESKTOP_WINDOW (window) && nemo_desktop_window_get_grid_adjusts (NEMO_DESKTOP_WINDOW (window), h_adjust, - v_adjust)) { + v_adjust) && + nemo_desktop_window_get_label_scale_adjust (NEMO_DESKTOP_WINDOW (window), + label_scale_adjust)) { *action_group = nemo_desktop_window_get_action_group (NEMO_DESKTOP_WINDOW (window)); } else { @@ -982,6 +997,11 @@ nemo_desktop_manager_show_desktop_overlay (NemoDesktopManager *manager, "adjusts-changed", G_CALLBACK (on_overlay_adjustments_changed), manager); + + g_signal_connect (priv->overlay, + "label-scale-changed", + G_CALLBACK (on_overlay_label_scale_changed), + manager); } nemo_desktop_overlay_show (priv->overlay, monitor); diff --git a/src/nemo-desktop-manager.h b/src/nemo-desktop-manager.h index c39fa637b..e8c7487c4 100644 --- a/src/nemo-desktop-manager.h +++ b/src/nemo-desktop-manager.h @@ -47,7 +47,8 @@ void nemo_desktop_manager_get_overlay_info (NemoDesktopManager *man gint monitor, GtkActionGroup **action_group, gint *h_adjust, - gint *v_adjust); + gint *v_adjust, + double *label_scale_adjust); void nemo_desktop_manager_show_desktop_overlay (NemoDesktopManager *manager, gint initial_monitor); gboolean nemo_desktop_manager_get_is_cinnamon (NemoDesktopManager *manager); diff --git a/src/nemo-desktop-overlay.c b/src/nemo-desktop-overlay.c index ca04f1adc..24020f8ed 100644 --- a/src/nemo-desktop-overlay.c +++ b/src/nemo-desktop-overlay.c @@ -31,10 +31,13 @@ typedef struct guint adjust_changed_id; guint configure_event_id; + guint label_scale_adjust_changed_id; gint h_percent; gint v_percent; + double label_scale; + gboolean syncing; } NemoDesktopOverlayPrivate; @@ -48,6 +51,7 @@ struct _NemoDesktopOverlay enum { ADJUSTS_CHANGED, + LABEL_SCALE_CHANGED, LAST_SIGNAL }; @@ -113,6 +117,7 @@ sync_controls (NemoDesktopOverlay *overlay, gint h_adjust, v_adjust, active_id; gboolean fake_group; const gchar *combo_id; + double label_scale; priv->syncing = TRUE; @@ -133,7 +138,8 @@ sync_controls (NemoDesktopOverlay *overlay, priv->monitor, &action_group, &h_adjust, - &v_adjust); + &v_adjust, + &label_scale); range = GTK_RANGE (gtk_builder_get_object (priv->builder, "horizontal_adjust_slider")); gtk_range_set_value (range, (double) h_adjust); @@ -141,6 +147,9 @@ sync_controls (NemoDesktopOverlay *overlay, range = GTK_RANGE (gtk_builder_get_object (priv->builder, "vertical_adjust_slider")); gtk_range_set_value (range, (double) v_adjust); + range = GTK_RANGE (gtk_builder_get_object (priv->builder, "label_width_slider")); + gtk_range_set_value (range, label_scale); + /* Catch enabling of a particular monitor. If we were a blank window and now * we're a real desktop window, it makes sense to present the view settings to the user */ if (same_monitor && (action_group != priv->action_group)) { @@ -268,6 +277,28 @@ signal_adjust_changed (NemoDesktopOverlay *overlay) } } +static void +signal_label_scale_adjust_changed (NemoDesktopOverlay *overlay) +{ + NemoDesktopOverlayPrivate *priv = overlay->priv; + double label_scale, val; + + val = gtk_range_get_value (GTK_RANGE (gtk_builder_get_object (priv->builder, + "label_width_slider"))); + + /* limit icon label width scaling to 50% to 200% */ + label_scale = fmax (fmin (val, 200.0), 50.0); + + if (label_scale != priv->label_scale) { + priv->label_scale = label_scale; + + g_signal_emit (overlay, + signals[LABEL_SCALE_CHANGED], 0, + priv->nemo_window, + label_scale); + } +} + static gboolean signal_adjust_delay_timeout (gpointer user_data) { @@ -281,6 +312,19 @@ signal_adjust_delay_timeout (gpointer user_data) return FALSE; } +static gboolean +signal_label_scale_adjust_delay_timeout (gpointer user_data) +{ + NemoDesktopOverlay *overlay = NEMO_DESKTOP_OVERLAY (user_data); + NemoDesktopOverlayPrivate *priv = nemo_desktop_overlay_get_instance_private (overlay); + + priv->label_scale_adjust_changed_id = 0; + + signal_label_scale_adjust_changed (overlay); + + return FALSE; +} + static void queue_changed_signal (NemoDesktopOverlay *overlay) { @@ -297,6 +341,22 @@ queue_changed_signal (NemoDesktopOverlay *overlay) priv->adjust_changed_id = g_timeout_add (50, (GSourceFunc) signal_adjust_delay_timeout, overlay); } +static void +queue_label_scale_changed_signal (NemoDesktopOverlay *overlay) +{ + NemoDesktopOverlayPrivate *priv = nemo_desktop_overlay_get_instance_private (overlay); + + if (priv->syncing) { + return; + } + + if (priv->label_scale_adjust_changed_id > 0) { + return; + } + + priv->label_scale_adjust_changed_id = g_timeout_add (50, (GSourceFunc) signal_label_scale_adjust_delay_timeout, overlay); +} + static void on_horizontal_adjust_changed (GtkRange *range, gpointer user_data) @@ -315,6 +375,16 @@ on_vertical_adjust_changed (GtkRange *range, queue_changed_signal (overlay); } + +static void +on_label_scale_adjust_changed (GtkRange *range, + gpointer user_data) +{ + NemoDesktopOverlay *overlay = NEMO_DESKTOP_OVERLAY (user_data); + + queue_label_scale_changed_signal (overlay); +} + static void on_combo_changed (GtkComboBox *widget, gpointer user_data) @@ -389,6 +459,9 @@ on_grid_reset_button_clicked (GtkWidget *button, range = GTK_RANGE (gtk_builder_get_object (priv->builder, "vertical_adjust_slider")); gtk_range_set_value (range, 100.0); + + range = GTK_RANGE (gtk_builder_get_object (priv->builder, "label_width_slider")); + gtk_range_set_value (range, 100.0); } static gboolean @@ -515,6 +588,7 @@ nemo_desktop_overlay_init (NemoDesktopOverlay *overlay) gtk_builder_add_callback_symbols (priv->builder, "on_vertical_adjust_changed", G_CALLBACK (on_vertical_adjust_changed), "on_horizontal_adjust_changed", G_CALLBACK (on_horizontal_adjust_changed), + "on_label_scale_adjust_changed", G_CALLBACK (on_label_scale_adjust_changed), "on_disabled_view_link_button_clicked", G_CALLBACK (on_view_prefs_button_clicked), "on_disabled_view_link_button_activate_link", G_CALLBACK (on_link_button_activate_link), "on_view_prefs_link_button_clicked", G_CALLBACK (on_view_prefs_button_clicked), @@ -601,6 +675,15 @@ nemo_desktop_overlay_class_init (NemoDesktopOverlayClass *klass) G_TYPE_NONE, 3, NEMO_TYPE_WINDOW, G_TYPE_INT, G_TYPE_INT); + signals[LABEL_SCALE_CHANGED] = + g_signal_new ("label-scale-changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, NULL, + G_TYPE_NONE, 2, + NEMO_TYPE_WINDOW, G_TYPE_DOUBLE); + G_OBJECT_CLASS (klass)->dispose = nemo_desktop_overlay_dispose; } diff --git a/src/nemo-desktop-window.c b/src/nemo-desktop-window.c index b36ba9ba1..60199a523 100644 --- a/src/nemo-desktop-window.c +++ b/src/nemo-desktop-window.c @@ -415,6 +415,47 @@ nemo_desktop_window_set_grid_adjusts (NemoDesktopWindow *window, return TRUE; } + +gboolean +nemo_desktop_window_get_label_scale_adjust (NemoDesktopWindow *window, + double *label_scale_adjust) +{ + NemoView *view; + NemoWindowSlot *slot; + NemoFile *file; + + slot = nemo_window_get_active_slot (NEMO_WINDOW (window)); + view = nemo_window_slot_get_current_view (slot); + + g_return_val_if_fail (NEMO_IS_VIEW (view), FALSE); + + file = nemo_view_get_directory_as_file (view); + + nemo_icon_view_get_directory_label_scale_adjust (NEMO_ICON_VIEW (view), + file, + label_scale_adjust); + + return TRUE; +} + +gboolean +nemo_desktop_window_set_label_scale_adjust (NemoDesktopWindow *window, + double label_scale_adjust) +{ + NemoView *view; + NemoWindowSlot *slot; + + slot = nemo_window_get_active_slot (NEMO_WINDOW (window)); + view = nemo_window_slot_get_current_view (slot); + + g_return_val_if_fail (NEMO_IS_DESKTOP_ICON_GRID_VIEW (view), FALSE); + + nemo_desktop_icon_grid_view_set_label_scale_adjust (NEMO_DESKTOP_ICON_GRID_VIEW (view), + label_scale_adjust); + + return TRUE; +} + GtkActionGroup * nemo_desktop_window_get_action_group (NemoDesktopWindow *window) { @@ -427,4 +468,4 @@ nemo_desktop_window_get_action_group (NemoDesktopWindow *window) g_return_val_if_fail (NEMO_IS_DESKTOP_ICON_GRID_VIEW (view), NULL); return nemo_desktop_icon_grid_view_get_action_group (NEMO_DESKTOP_ICON_GRID_VIEW (view)); -} \ No newline at end of file +} diff --git a/src/nemo-desktop-window.h b/src/nemo-desktop-window.h index cf9d6deb9..338b29b1e 100644 --- a/src/nemo-desktop-window.h +++ b/src/nemo-desktop-window.h @@ -53,16 +53,20 @@ typedef struct { NemoWindowClass parent_spot; } NemoDesktopWindowClass; -GType nemo_desktop_window_get_type (void); -NemoDesktopWindow *nemo_desktop_window_new (gint monitor); -gboolean nemo_desktop_window_loaded (NemoDesktopWindow *window); -gint nemo_desktop_window_get_monitor (NemoDesktopWindow *window); -void nemo_desktop_window_update_geometry (NemoDesktopWindow *window); -gboolean nemo_desktop_window_get_grid_adjusts (NemoDesktopWindow *window, - gint *h_adjust, - gint *v_adjust); -gboolean nemo_desktop_window_set_grid_adjusts (NemoDesktopWindow *window, - gint h_adjust, - gint v_adjust); -GtkActionGroup * nemo_desktop_window_get_action_group (NemoDesktopWindow *window); +GType nemo_desktop_window_get_type (void); +NemoDesktopWindow *nemo_desktop_window_new (gint monitor); +gboolean nemo_desktop_window_loaded (NemoDesktopWindow *window); +gint nemo_desktop_window_get_monitor (NemoDesktopWindow *window); +void nemo_desktop_window_update_geometry (NemoDesktopWindow *window); +gboolean nemo_desktop_window_get_grid_adjusts (NemoDesktopWindow *window, + gint *h_adjust, + gint *v_adjust); +gboolean nemo_desktop_window_set_grid_adjusts (NemoDesktopWindow *window, + gint h_adjust, + gint v_adjust); +gboolean nemo_desktop_window_get_label_scale_adjust (NemoDesktopWindow *window, + double *label_scale_adjust); +gboolean nemo_desktop_window_set_label_scale_adjust (NemoDesktopWindow *window, + double label_scale_adjust); +GtkActionGroup * nemo_desktop_window_get_action_group (NemoDesktopWindow *window); #endif /* NEMO_DESKTOP_WINDOW_H */ diff --git a/src/nemo-icon-view-grid-container.c b/src/nemo-icon-view-grid-container.c index cfdb72595..ec67db33b 100644 --- a/src/nemo-icon-view-grid-container.c +++ b/src/nemo-icon-view-grid-container.c @@ -1418,7 +1418,7 @@ update_layout_constants (NemoIconContainer *container) { gint icon_size, ellipsis_pref; NemoViewLayoutConstants *constants; - gdouble scale, h_adjust, v_adjust; + gdouble scale, h_adjust, v_adjust, label_scale_adjust; update_auto_strv_as_quarks (nemo_icon_view_preferences, NEMO_PREFERENCES_ICON_VIEW_CAPTIONS, @@ -1433,12 +1433,13 @@ update_layout_constants (NemoIconContainer *container) h_adjust = container->details->h_adjust / 100.0; v_adjust = container->details->v_adjust / 100.0; + label_scale_adjust = container->details->label_scale_adjust / 100.0; constants = container->details->view_constants; constants->snap_size_x = BASE_SNAP_SIZE_X * scale * h_adjust; constants->snap_size_y = BASE_SNAP_SIZE_Y * scale * v_adjust; - constants->max_text_width_standard = BASE_MAX_TEXT_WIDTH * scale * h_adjust; + constants->max_text_width_standard = BASE_MAX_TEXT_WIDTH * scale * label_scale_adjust; constants->icon_vertical_adjust = MIN (get_vertical_adjustment (container, icon_size), constants->snap_size_y / 2); /* This isn't what this is intended for, but it's a simple way vs. overriding what diff --git a/src/nemo-icon-view.c b/src/nemo-icon-view.c index 8ee362d24..13beadbbe 100644 --- a/src/nemo-icon-view.c +++ b/src/nemo-icon-view.c @@ -865,6 +865,37 @@ nemo_icon_view_get_directory_grid_adjusts (NemoIconView *icon_view, *vertical = v; } +void +nemo_icon_view_set_directory_label_scale_adjust (NemoIconView *icon_view, + NemoFile *file, + double scale) +{ + sync_directory_monitor_number (icon_view, file); + + nemo_file_set_desktop_label_scale_adjust (file, + NEMO_METADATA_KEY_DESKTOP_LABEL_SACLE_ADJUST, + scale); +} + +void +nemo_icon_view_get_directory_label_scale_adjust (NemoIconView *icon_view, + NemoFile *file, + double *scale) +{ + double the_scale; + + sync_directory_monitor_number (icon_view, file); + + nemo_file_get_desktop_label_scale_adjust (file, + NEMO_METADATA_KEY_DESKTOP_LABEL_SACLE_ADJUST, + &the_scale); + + if (scale) { + *scale = the_scale; + } + +} + gboolean nemo_icon_view_set_sort_reversed (NemoIconView *icon_view, gboolean new_value, @@ -984,6 +1015,7 @@ nemo_icon_view_begin_loading (NemoView *view) int level; int h_adjust, v_adjust; char *sort_name, *uri; + double label_scale_adjust; g_return_if_fail (NEMO_IS_ICON_VIEW (view)); @@ -1048,7 +1080,12 @@ nemo_icon_view_begin_loading (NemoView *view) &h_adjust, &v_adjust); + nemo_icon_view_get_directory_label_scale_adjust (NEMO_ICON_VIEW (view), + file, + &label_scale_adjust); + nemo_icon_container_set_grid_adjusts (get_icon_container (icon_view), h_adjust, v_adjust); + nemo_icon_container_set_label_scale_adjust (get_icon_container (icon_view), label_scale_adjust); set_labels_beside_icons (icon_view); set_columns_same_width (icon_view); diff --git a/src/nemo-icon-view.h b/src/nemo-icon-view.h index 6f7ee008c..93b94960c 100644 --- a/src/nemo-icon-view.h +++ b/src/nemo-icon-view.h @@ -96,4 +96,11 @@ void nemo_icon_view_get_directory_grid_adjusts (NemoIconView *icon_view, NemoFile *file, gint *horizontal, gint *vertical); + +void nemo_icon_view_set_directory_label_scale_adjust (NemoIconView *icon_view, + NemoFile *file, + double scale); +void nemo_icon_view_get_directory_label_scale_adjust (NemoIconView *icon_view, + NemoFile *file, + double *scale); #endif /* NEMO_ICON_VIEW_H */