[nautilus/wip/antoniof/new-list-view-continuation] toolbar-view-menu: Add icon size options to view menu



commit d5c9cff675bddbac71582e93fdd8ccbfc9707a24
Author: António Fernandes <antoniof gnome org>
Date:   Thu Jun 2 17:29:39 2022 +0100

    toolbar-view-menu: Add icon size options to view menu
    
    And remove control from primary menu.
    
    Closes https://gitlab.gnome.org/GNOME/nautilus/-/issues/2222

 src/nautilus-files-view.c                      |  8 ++++++
 src/nautilus-grid-view.c                       |  2 +-
 src/nautilus-list-view.c                       |  2 +-
 src/nautilus-toolbar-menu-sections.h           |  1 +
 src/nautilus-toolbar.c                         | 15 ++++++----
 src/resources/ui/nautilus-toolbar-view-menu.ui | 31 ++++++++++++++++++++
 src/resources/ui/nautilus-toolbar.ui           | 39 ++++++--------------------
 7 files changed, 61 insertions(+), 37 deletions(-)
---
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 26263bbe0..bd005833f 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -3319,6 +3319,7 @@ nautilus_files_view_finalize (GObject *object)
     g_clear_object (&priv->view_action_group);
     g_clear_object (&priv->background_menu_model);
     g_clear_object (&priv->selection_menu_model);
+    g_clear_object (&priv->toolbar_menu_sections->icon_size_section);
     g_clear_object (&priv->toolbar_menu_sections->sort_section);
     g_clear_object (&priv->extensions_background_menu);
     g_clear_object (&priv->templates_menu);
@@ -8061,12 +8062,18 @@ nautilus_files_view_reset_view_menu (NautilusFilesView *view)
 {
     NautilusFilesViewPrivate *priv = nautilus_files_view_get_instance_private (view);
     NautilusFile *file;
+    GMenuModel *icon_size_section = priv->toolbar_menu_sections->icon_size_section;
     GMenuModel *sort_section = priv->toolbar_menu_sections->sort_section;
     const gchar *action;
     gint i;
 
     file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (view));
 
+    /* Extra large icons option is available for grid view only. */
+    action = NAUTILUS_IS_GRID_VIEW (view) ? "view.zoom-to-level" : "doesnt-exist";
+    i = nautilus_g_menu_model_find_by_string (icon_size_section, "nautilus-menu-item", "extra-large");
+    nautilus_g_menu_replace_string_in_item (G_MENU (icon_size_section), i, "action", action);
+
     /* When not in the special location, set an inexistant action to hide the
      * menu item. This works under the assumptiont that the menu item has its
      * "hidden-when" attribute set to "action-disabled", and that an inexistant
@@ -9416,6 +9423,7 @@ nautilus_files_view_init (NautilusFilesView *view)
     /* Toolbar menu */
     builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/ui/nautilus-toolbar-view-menu.ui");
     priv->toolbar_menu_sections = g_new0 (NautilusToolbarMenuSections, 1);
+    priv->toolbar_menu_sections->icon_size_section = G_MENU_MODEL (g_object_ref (gtk_builder_get_object 
(builder, "icon_size_section")));
     priv->toolbar_menu_sections->sort_section = G_MENU_MODEL (g_object_ref (gtk_builder_get_object (builder, 
"sort_section")));
 
     g_signal_connect (view,
diff --git a/src/nautilus-grid-view.c b/src/nautilus-grid-view.c
index ffaec95ac..fb935d707 100644
--- a/src/nautilus-grid-view.c
+++ b/src/nautilus-grid-view.c
@@ -658,7 +658,7 @@ create_view_ui (NautilusGridView *self)
 const GActionEntry view_icon_actions[] =
 {
     { "sort", NULL, "(sb)", "('invalid',false)", action_sort_order_changed },
-    { "zoom-to-level", NULL, NULL, "100", action_zoom_to_level }
+    { "zoom-to-level", NULL, "i", "100", action_zoom_to_level }
 };
 
 static void
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index 412c64e2d..c0b995ad0 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -713,7 +713,7 @@ const GActionEntry list_view_entries[] =
 {
     { "visible-columns", action_visible_columns },
     { "sort", NULL, "(sb)", "('invalid',false)", action_sort_order_changed },
-    { "zoom-to-level", NULL, NULL, "1", action_zoom_to_level }
+    { "zoom-to-level", NULL, "i", "1", action_zoom_to_level }
 };
 
 /* GtkListBase changes selection only with the primary button, and only after
diff --git a/src/nautilus-toolbar-menu-sections.h b/src/nautilus-toolbar-menu-sections.h
index 8f5a98667..fc907226c 100644
--- a/src/nautilus-toolbar-menu-sections.h
+++ b/src/nautilus-toolbar-menu-sections.h
@@ -25,6 +25,7 @@ typedef struct _NautilusToolbarMenuSections NautilusToolbarMenuSections;
 
 struct _NautilusToolbarMenuSections {
         GMenuModel *sort_section;
+        GMenuModel *icon_size_section;
 };
 
 G_END_DECLS
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index 57fe64dc3..1e9d44aae 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -1219,7 +1219,7 @@ on_slot_toolbar_menu_sections_changed (NautilusToolbar    *self,
                                        NautilusWindowSlot *slot)
 {
     NautilusToolbarMenuSections *new_sections;
-    g_autoptr (GMenuItem) zoom_item = NULL;
+    g_autoptr (GMenuItem) icon_size_item = NULL;
     g_autoptr (GMenuItem) sort_item = NULL;
 
     new_sections = nautilus_window_slot_get_toolbar_menu_sections (slot);
@@ -1230,13 +1230,18 @@ on_slot_toolbar_menu_sections_changed (NautilusToolbar    *self,
         return;
     }
 
-    /* Let's assume that sort section is the first item
-     * in view_menu, as per nautilus-toolbar.ui. */
+    /* Let's assume that icon size and sort sections are the first and second
+     * items in view_menu, as per nautilus-toolbar.ui. */
 
-    sort_item = g_menu_item_new_from_model (self->view_menu, 0);
+    icon_size_item = g_menu_item_new_from_model (self->view_menu, 0);
     g_menu_remove (G_MENU (self->view_menu), 0);
+    g_menu_item_set_section (icon_size_item, new_sections->icon_size_section);
+    g_menu_insert_item (G_MENU (self->view_menu), 0, icon_size_item);
+
+    sort_item = g_menu_item_new_from_model (self->view_menu, 1);
+    g_menu_remove (G_MENU (self->view_menu), 1);
     g_menu_item_set_section (sort_item, new_sections->sort_section);
-    g_menu_insert_item (G_MENU (self->view_menu), 0, sort_item);
+    g_menu_insert_item (G_MENU (self->view_menu), 1, sort_item);
 }
 
 
diff --git a/src/resources/ui/nautilus-toolbar-view-menu.ui b/src/resources/ui/nautilus-toolbar-view-menu.ui
index 03c6e8e8d..40b30e9fb 100644
--- a/src/resources/ui/nautilus-toolbar-view-menu.ui
+++ b/src/resources/ui/nautilus-toolbar-view-menu.ui
@@ -1,6 +1,37 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk" version="4.0"/>
+  <menu id="icon_size_section">
+    <item>
+      <attribute name="action">view.zoom-to-level</attribute>
+      <attribute name="target" type="i">3</attribute>
+      <attribute name="label" translatable="yes" context="View menu"
+                 comments="An icon size to choose for items in the view">Extra Large</attribute>
+      <attribute name="hidden-when">action-disabled</attribute>
+      <attribute name="nautilus-menu-item">extra-large</attribute>
+    </item>
+    <item>
+      <attribute name="action">view.zoom-to-level</attribute>
+      <attribute name="target" type="i">2</attribute>
+      <attribute name="label" translatable="yes" context="View menu"
+                 comments="An icon size to choose for items in the view">Large</attribute>
+      <attribute name="hidden-when">action-disabled</attribute>
+    </item>
+    <item>
+      <attribute name="action">view.zoom-to-level</attribute>
+      <attribute name="target" type="i">1</attribute>
+      <attribute name="label" translatable="yes" context="View menu"
+                 comments="An icon size to choose for items in the view">Medium</attribute>
+      <attribute name="hidden-when">action-disabled</attribute>
+    </item>
+    <item>
+      <attribute name="action">view.zoom-to-level</attribute>
+      <attribute name="target" type="i">0</attribute>
+      <attribute name="label" translatable="yes" context="View menu"
+                 comments="An icon size to choose for items in the view">Small</attribute>
+      <attribute name="hidden-when">action-disabled</attribute>
+    </item>
+  </menu>
   <menu id="sort_section">
     <item>
       <attribute name="action">view.sort</attribute>
diff --git a/src/resources/ui/nautilus-toolbar.ui b/src/resources/ui/nautilus-toolbar.ui
index aa07a17a6..a5f6c6d48 100644
--- a/src/resources/ui/nautilus-toolbar.ui
+++ b/src/resources/ui/nautilus-toolbar.ui
@@ -4,6 +4,15 @@
   <object class="GtkPopoverMenu" id="back_menu"/>
   <object class="GtkPopoverMenu" id="forward_menu"/>
   <menu id="view_menu">
+    <section>
+      <attribute name="label" translatable="yes" context="menu item" comments="Translators: a menu item in a 
group of icon size options in a toolbar menu, with options such as &quot;Small&quot; or 
&quot;Large&quot;.">Icon Size</attribute>
+      <!--
+           Icon size section.
+
+           The toolbar code assumes this is the first item of this menu model.
+           Its contents is provided by the view.
+      -->
+    </section>
     <section>
       <attribute name="label" translatable="yes" context="menu item" comments="Translators: a menu item in a 
group of sorting options in a toolbar menu, with criterions such as &quot;A-Z&quot; or &quot;Last 
Modified&quot;.">Sort</attribute>
       <!--
@@ -44,16 +53,6 @@
         <attribute name="verb-icon">tab-new-symbolic</attribute>
       </item>
     </section>
-    <section>
-      <attribute name="label" translatable="yes">Icon size</attribute>
-      <attribute name="display-hint">inline-buttons</attribute>
-      <item>
-        <attribute name="custom">zoom-out</attribute>
-      </item>
-      <item>
-        <attribute name="custom">zoom-in</attribute>
-      </item>
-    </section>
     <section id="undo_redo_section">
       <!-- Note: This section is often recreated by undo_manager_changed() to
            change the labels of the actions. If you change anything here,
@@ -235,26 +234,6 @@
             <property name="popover">
               <object class="GtkPopoverMenu">
                 <property name="menu-model">app_menu</property>
-                <child type="zoom-out">
-                  <object class="GtkButton">
-                    <property name="icon-name">zoom-out-symbolic</property>
-                    <property name="action-name">view.zoom-out</property>
-                    <property name="tooltip-text">Zoom out</property>
-                    <style>
-                      <class name="flat"/>
-                    </style>
-                  </object>
-                </child>
-                <child type="zoom-in">
-                  <object class="GtkButton">
-                    <property name="icon-name">zoom-in-symbolic</property>
-                    <property name="action-name">view.zoom-in</property>
-                    <property name="tooltip-text">Zoom in</property>
-                    <style>
-                      <class name="flat"/>
-                    </style>
-                  </object>
-                </child>
               </object>
             </property>
             <child>


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