summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Herald <neil.herald@gmail.com>2016-05-02 18:34:57 +0100
committerNeil Herald <neil.herald@gmail.com>2016-06-22 23:38:22 +0100
commit06029b1ae9e4b7a220a9c25d772ce0a9729877af (patch)
treeb0e22f1934b5997445d9d100f142a92073b07272
parentcb7134c8c2c325a4c8e86eebaf1ca85be78537ec (diff)
downloadnautilus-06029b1ae9e4b7a220a9c25d772ce0a9729877af.tar.gz
toolbar-view-menu: replace zoom slider with buttons
Convert the zoom slider into a horizontal button list, with a button in the middle to show the current zoom level percentage. This is part of the toolbar menu redesign to improve the usability of the menus. https://bugzilla.gnome.org/show_bug.cgi?id=764632
-rw-r--r--src/nautilus-canvas-view.c20
-rw-r--r--src/nautilus-empty-view.c13
-rw-r--r--src/nautilus-files-view.c64
-rw-r--r--src/nautilus-files-view.h8
-rw-r--r--src/nautilus-list-view.c22
-rw-r--r--src/resources/ui/nautilus-toolbar-view-menu.ui101
6 files changed, 182 insertions, 46 deletions
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index 9cd3f3480..563a48c65 100644
--- a/src/nautilus-canvas-view.c
+++ b/src/nautilus-canvas-view.c
@@ -834,6 +834,12 @@ nautilus_canvas_view_restore_default_zoom_level (NautilusFilesView *view)
(view, get_default_zoom_level (canvas_view));
}
+static void
+nautilus_canvas_view_restore_standard_zoom_level (NautilusFilesView *view)
+{
+ nautilus_canvas_view_zoom_to_level (view, NAUTILUS_CANVAS_ZOOM_LEVEL_LARGE);
+}
+
static gboolean
nautilus_canvas_view_can_zoom_in (NautilusFilesView *view)
{
@@ -852,6 +858,18 @@ nautilus_canvas_view_can_zoom_out (NautilusFilesView *view)
> NAUTILUS_CANVAS_ZOOM_LEVEL_SMALL;
}
+static gfloat
+nautilus_canvas_view_get_zoom_level_percentage (NautilusFilesView *view)
+{
+ guint icon_size;
+ NautilusCanvasZoomLevel zoom_level;
+
+ zoom_level = nautilus_canvas_view_get_zoom_level (view);
+ icon_size = nautilus_canvas_container_get_icon_size_for_zoom_level (zoom_level);
+
+ return (gfloat) icon_size / NAUTILUS_CANVAS_ICON_SIZE_LARGE;
+}
+
static gboolean
nautilus_canvas_view_is_empty (NautilusFilesView *view)
{
@@ -1898,6 +1916,7 @@ nautilus_canvas_view_class_init (NautilusCanvasViewClass *klass)
nautilus_files_view_class->bump_zoom_level = nautilus_canvas_view_bump_zoom_level;
nautilus_files_view_class->can_zoom_in = nautilus_canvas_view_can_zoom_in;
nautilus_files_view_class->can_zoom_out = nautilus_canvas_view_can_zoom_out;
+ nautilus_files_view_class->get_zoom_level_percentage = nautilus_canvas_view_get_zoom_level_percentage;
nautilus_files_view_class->clear = nautilus_canvas_view_clear;
nautilus_files_view_class->end_loading = nautilus_canvas_view_end_loading;
nautilus_files_view_class->file_changed = nautilus_canvas_view_file_changed;
@@ -1907,6 +1926,7 @@ nautilus_canvas_view_class_init (NautilusCanvasViewClass *klass)
nautilus_files_view_class->is_empty = nautilus_canvas_view_is_empty;
nautilus_files_view_class->remove_file = nautilus_canvas_view_remove_file;
nautilus_files_view_class->restore_default_zoom_level = nautilus_canvas_view_restore_default_zoom_level;
+ nautilus_files_view_class->restore_standard_zoom_level = nautilus_canvas_view_restore_standard_zoom_level;
nautilus_files_view_class->reveal_selection = nautilus_canvas_view_reveal_selection;
nautilus_files_view_class->select_all = nautilus_canvas_view_select_all;
nautilus_files_view_class->select_first = nautilus_canvas_view_select_first;
diff --git a/src/nautilus-empty-view.c b/src/nautilus-empty-view.c
index b8518ab10..97c9ce723 100644
--- a/src/nautilus-empty-view.c
+++ b/src/nautilus-empty-view.c
@@ -155,6 +155,11 @@ nautilus_empty_view_restore_default_zoom_level (NautilusFilesView *view)
{
}
+static void
+nautilus_empty_view_restore_standard_zoom_level (NautilusFilesView *view)
+{
+}
+
static gboolean
nautilus_empty_view_can_zoom_in (NautilusFilesView *view)
{
@@ -167,6 +172,12 @@ nautilus_empty_view_can_zoom_out (NautilusFilesView *view)
return FALSE;
}
+static gfloat
+nautilus_empty_view_get_zoom_level_percentage (NautilusFilesView *view)
+{
+ return 1.0;
+}
+
static void
nautilus_empty_view_click_policy_changed (NautilusFilesView *directory_view)
{
@@ -242,6 +253,7 @@ nautilus_empty_view_class_init (NautilusEmptyViewClass *class)
nautilus_files_view_class->bump_zoom_level = nautilus_empty_view_bump_zoom_level;
nautilus_files_view_class->can_zoom_in = nautilus_empty_view_can_zoom_in;
nautilus_files_view_class->can_zoom_out = nautilus_empty_view_can_zoom_out;
+ nautilus_files_view_class->get_zoom_level_percentage = nautilus_empty_view_get_zoom_level_percentage;
nautilus_files_view_class->click_policy_changed = nautilus_empty_view_click_policy_changed;
nautilus_files_view_class->clear = nautilus_empty_view_clear;
nautilus_files_view_class->file_changed = nautilus_empty_view_file_changed;
@@ -251,6 +263,7 @@ nautilus_empty_view_class_init (NautilusEmptyViewClass *class)
nautilus_files_view_class->remove_file = nautilus_empty_view_remove_file;
nautilus_files_view_class->update_menus = nautilus_empty_view_update_menus;
nautilus_files_view_class->restore_default_zoom_level = nautilus_empty_view_restore_default_zoom_level;
+ nautilus_files_view_class->restore_standard_zoom_level = nautilus_empty_view_restore_standard_zoom_level;
nautilus_files_view_class->reveal_selection = nautilus_empty_view_reveal_selection;
nautilus_files_view_class->select_all = nautilus_empty_view_select_all;
nautilus_files_view_class->set_selection = nautilus_empty_view_set_selection;
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 078a27c3b..04fac012b 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -268,8 +268,8 @@ struct NautilusFilesViewDetails
GtkWidget *visible_columns;
GtkWidget *stop;
GtkWidget *reload;
- GtkAdjustment *zoom_adjustment;
- GtkWidget *zoom_level_scale;
+ GtkWidget *zoom_controls_box;
+ GtkWidget *zoom_level_label;
GtkWidget *undo_button;
GtkWidget *redo_button;
@@ -780,6 +780,28 @@ nautilus_files_view_restore_default_zoom_level (NautilusFilesView *view)
NAUTILUS_FILES_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->restore_default_zoom_level (view);
}
+/**
+ * nautilus_files_view_restore_standard_zoom_level:
+ *
+ * Restore the zoom level to 100%
+ */
+static void
+nautilus_files_view_restore_standard_zoom_level (NautilusFilesView *view)
+{
+ if (!nautilus_files_view_supports_zooming (view))
+ return;
+
+ NAUTILUS_FILES_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->restore_standard_zoom_level (view);
+}
+
+static gfloat
+nautilus_files_view_get_zoom_level_percentage (NautilusFilesView *view)
+{
+ g_return_val_if_fail (NAUTILUS_IS_FILES_VIEW (view), 1);
+
+ return NAUTILUS_FILES_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_zoom_level_percentage (view);
+}
+
gboolean
nautilus_files_view_is_searching (NautilusView *view)
{
@@ -1548,15 +1570,6 @@ action_select_pattern (GSimpleAction *action,
select_pattern(user_data);
}
-static void
-zoom_level_changed (GtkRange *range,
- NautilusFilesView *view)
-{
- g_action_group_change_action_state (view->details->view_action_group,
- "zoom-to-level",
- g_variant_new_int32 (gtk_range_get_value (range)));
-}
-
typedef struct {
NautilusFilesView *directory_view;
GHashTable *added_locations;
@@ -2361,6 +2374,14 @@ action_zoom_default (GSimpleAction *action,
}
static void
+action_zoom_standard (GSimpleAction *action,
+ GVariant *state,
+ gpointer user_data)
+{
+ nautilus_files_view_restore_standard_zoom_level (user_data);
+}
+
+static void
action_open_item_new_window (GSimpleAction *action,
GVariant *state,
gpointer user_data)
@@ -6016,6 +6037,7 @@ const GActionEntry view_entries[] = {
{ "zoom-in", action_zoom_in },
{ "zoom-out", action_zoom_out },
{ "zoom-default", action_zoom_default },
+ { "zoom-standard", action_zoom_standard },
{ "show-hidden-files", NULL, NULL, "true", action_show_hidden_files },
/* Background menu */
{ "new-folder", action_new_folder },
@@ -6622,6 +6644,10 @@ real_update_actions_state (NautilusFilesView *view)
g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
nautilus_files_view_supports_zooming (view));
action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
+ "zoom-standard");
+ g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
+ nautilus_files_view_supports_zooming (view));
+ action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
"zoom-to-level");
g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
!nautilus_files_view_is_empty (view));
@@ -6883,6 +6909,7 @@ nautilus_files_view_reset_view_menu (NautilusFilesView *view)
GVariantIter iter;
gboolean show_sort_trash, show_sort_search, show_sort_access, show_sort_modification, sort_available;
const gchar *hint;
+ g_autofree gchar *zoom_level_percent = NULL;
view_action_group = nautilus_files_view_get_action_group (view);
@@ -6898,7 +6925,7 @@ nautilus_files_view_reset_view_menu (NautilusFilesView *view)
*/
gtk_widget_set_sensitive (view->details->sort_menu,
!nautilus_files_view_is_empty (view));
- gtk_widget_set_sensitive (view->details->zoom_level_scale,
+ gtk_widget_set_sensitive (view->details->zoom_controls_box,
!nautilus_files_view_is_empty (view));
if (sort_available) {
@@ -6918,10 +6945,8 @@ nautilus_files_view_reset_view_menu (NautilusFilesView *view)
gtk_widget_set_visible (view->details->sort_trash_time, show_sort_trash);
gtk_widget_set_visible (view->details->sort_search_relevance, show_sort_search);
- variant = g_action_group_get_action_state (view_action_group, "zoom-to-level");
- gtk_adjustment_set_value (view->details->zoom_adjustment,
- g_variant_get_int32 (variant));
- g_variant_unref (variant);
+ zoom_level_percent = g_strdup_printf ("%.0f%%", nautilus_files_view_get_zoom_level_percentage (view) * 100.0);
+ gtk_label_set_label (GTK_LABEL (view->details->zoom_level_label), zoom_level_percent);
}
/* Convenience function to reset the menus owned by the view but managed on
@@ -8234,8 +8259,8 @@ nautilus_files_view_init (NautilusFilesView *view)
/* View menu */
builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/ui/nautilus-toolbar-view-menu.ui");
view->details->view_menu_widget = g_object_ref_sink (gtk_builder_get_object (builder, "view_menu_widget"));
- view->details->zoom_level_scale = GTK_WIDGET (gtk_builder_get_object (builder, "zoom_level_scale"));
- view->details->zoom_adjustment = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "zoom_adjustment"));
+ view->details->zoom_controls_box = GTK_WIDGET (gtk_builder_get_object (builder, "zoom_controls_box"));
+ view->details->zoom_level_label = GTK_WIDGET (gtk_builder_get_object (builder, "zoom_level_label"));
view->details->sort_menu = GTK_WIDGET (gtk_builder_get_object (builder, "sort_menu"));
view->details->sort_trash_time = GTK_WIDGET (gtk_builder_get_object (builder, "sort_trash_time"));
@@ -8247,9 +8272,6 @@ nautilus_files_view_init (NautilusFilesView *view)
view->details->undo_button = GTK_WIDGET (gtk_builder_get_object (builder, "undo"));
view->details->redo_button = GTK_WIDGET (gtk_builder_get_object (builder, "redo"));
- g_signal_connect (view->details->zoom_level_scale, "value-changed",
- G_CALLBACK (zoom_level_changed), view);
-
g_signal_connect (view,
"end-file-changes",
G_CALLBACK (on_end_file_changes),
diff --git a/src/nautilus-files-view.h b/src/nautilus-files-view.h
index 9b5a28b11..b76ae6ad2 100644
--- a/src/nautilus-files-view.h
+++ b/src/nautilus-files-view.h
@@ -183,6 +183,11 @@ struct NautilusFilesViewClass {
* to restore the zoom level of an object to a default setting. */
void (* restore_default_zoom_level) (NautilusFilesView *view);
+ /*
+ * restore_default_zoom_level: restores the zoom level to 100% (or to
+ * whatever is considered the 'standard' zoom level for the view). */
+ void (* restore_standard_zoom_level) (NautilusFilesView *view);
+
/* can_zoom_in is a function pointer that subclasses must override to
* return whether the view is at maximum size (furthest-in zoom level) */
gboolean (* can_zoom_in) (NautilusFilesView *view);
@@ -191,6 +196,9 @@ struct NautilusFilesViewClass {
* return whether the view is at minimum size (furthest-out zoom level) */
gboolean (* can_zoom_out) (NautilusFilesView *view);
+ /* The current zoom level as a percentage of the default (0, 1] */
+ gfloat (* get_zoom_level_percentage) (NautilusFilesView *view);
+
/* reveal_selection is a function pointer that subclasses may
* override to make sure the selected items are sufficiently
* apparent to the user (e.g., scrolled into view). By default,
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index ea5645bfc..53d8b7ec4 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -2764,6 +2764,12 @@ nautilus_list_view_restore_default_zoom_level (NautilusFilesView *view)
nautilus_list_view_zoom_to_level (view, get_default_zoom_level ());
}
+static void
+nautilus_list_view_restore_standard_zoom_level (NautilusFilesView *view)
+{
+ nautilus_list_view_zoom_to_level (view, NAUTILUS_LIST_ZOOM_LEVEL_STANDARD);
+}
+
static gboolean
nautilus_list_view_can_zoom_in (NautilusFilesView *view)
{
@@ -2780,6 +2786,20 @@ nautilus_list_view_can_zoom_out (NautilusFilesView *view)
return NAUTILUS_LIST_VIEW (view)->details->zoom_level > NAUTILUS_LIST_ZOOM_LEVEL_SMALL;
}
+static gfloat
+nautilus_list_view_get_zoom_level_percentage (NautilusFilesView *view)
+{
+ NautilusListView *list_view;
+ guint icon_size;
+
+ g_return_val_if_fail (NAUTILUS_IS_LIST_VIEW (view), 1.0);
+
+ list_view = NAUTILUS_LIST_VIEW (view);
+ icon_size = nautilus_list_model_get_icon_size_for_zoom_level (list_view->details->zoom_level);
+
+ return (gfloat) icon_size / NAUTILUS_LIST_ICON_SIZE_STANDARD;
+}
+
static void
nautilus_list_view_click_policy_changed (NautilusFilesView *directory_view)
{
@@ -3129,6 +3149,7 @@ nautilus_list_view_class_init (NautilusListViewClass *class)
nautilus_files_view_class->bump_zoom_level = nautilus_list_view_bump_zoom_level;
nautilus_files_view_class->can_zoom_in = nautilus_list_view_can_zoom_in;
nautilus_files_view_class->can_zoom_out = nautilus_list_view_can_zoom_out;
+ nautilus_files_view_class->get_zoom_level_percentage = nautilus_list_view_get_zoom_level_percentage;
nautilus_files_view_class->click_policy_changed = nautilus_list_view_click_policy_changed;
nautilus_files_view_class->clear = nautilus_list_view_clear;
nautilus_files_view_class->file_changed = nautilus_list_view_file_changed;
@@ -3138,6 +3159,7 @@ nautilus_list_view_class_init (NautilusListViewClass *class)
nautilus_files_view_class->is_empty = nautilus_list_view_is_empty;
nautilus_files_view_class->remove_file = nautilus_list_view_remove_file;
nautilus_files_view_class->restore_default_zoom_level = nautilus_list_view_restore_default_zoom_level;
+ nautilus_files_view_class->restore_standard_zoom_level = nautilus_list_view_restore_standard_zoom_level;
nautilus_files_view_class->reveal_selection = nautilus_list_view_reveal_selection;
nautilus_files_view_class->select_all = nautilus_list_view_select_all;
nautilus_files_view_class->select_first = nautilus_list_view_select_first;
diff --git a/src/resources/ui/nautilus-toolbar-view-menu.ui b/src/resources/ui/nautilus-toolbar-view-menu.ui
index f8e3d241c..0442f81ea 100644
--- a/src/resources/ui/nautilus-toolbar-view-menu.ui
+++ b/src/resources/ui/nautilus-toolbar-view-menu.ui
@@ -12,7 +12,8 @@
<object class="GtkBox" id="new_buttons_box">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
- <property name="margin-bottom">6</property>
+ <property name="homogeneous">True</property>
+ <property name="margin-bottom">9</property>
<style>
<class name="linked"/>
</style>
@@ -88,25 +89,82 @@
</object>
</child>
<child>
- <object class="GtkScale" id="zoom_level_scale">
+ <object class="GtkBox" id="zoom_controls_box">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">False</property>
- <property name="has_origin">False</property>
- <property name="adjustment">zoom_adjustment</property>
- <property name="round_digits">0</property>
- <property name="restrict_to_fill_level">False</property>
- <marks>
- <mark value="0" position="bottom"/>
- <mark value="1" position="bottom"/>
- <mark value="2" position="bottom"/>
- <mark value="3" position="bottom"/>
- </marks>
+ <property name="orientation">horizontal</property>
+ <property name="homogeneous">True</property>
+ <style>
+ <class name="linked"/>
+ </style>
+ <child>
+ <object class="GtkButton" id="zoom-out">
+ <property name="visible">True</property>
+ <property name="action-name">view.zoom-out</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">zoom-out-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ <child internal-child="accessible">
+ <object class="AtkObject">
+ <property name="accessible-name" translatable="yes">Zoom Out</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="zoom-default">
+ <property name="visible">True</property>
+ <property name="action_name">view.zoom-standard</property>
+ <child>
+ <object class="GtkLabel" id="zoom_level_label">
+ <property name="visible">True</property>
+ <property name="width-chars">5</property>
+ </object>
+ </child>
+ <child internal-child="accessible">
+ <object class="AtkObject">
+ <property name="accessible-name" translatable="yes">Reset Zoom</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="zoom-in">
+ <property name="visible">True</property>
+ <property name="action_name">view.zoom-in</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">zoom-in-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ <child internal-child="accessible">
+ <object class="AtkObject">
+ <property name="accessible-name" translatable="yes">Zoom In</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
</child>
<child>
<object class="GtkSeparator">
@@ -272,11 +330,4 @@
</object>
</child>
</object>
- <object class="GtkAdjustment" id="zoom_adjustment">
- <property name="lower">0</property>
- <property name="upper">3</property>
- <property name="step_increment">1</property>
- <property name="page_increment">1</property>
- <property name="value">1</property>
- </object>
</interface>