[nautilus] preferences-window: Implement new single-page design



commit 09417be32ea34272a1f4657c1cb9b26105bb09e0
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Wed Dec 9 13:41:03 2020 +0100

    preferences-window: Implement new single-page design
    
    The Preferences have been recently cleaned up, which now enables us to
    reorganize them in a single page using modern design patterns.
    
    Use HdyPreferencesWindow for convenience of implementation, as well
    as for the rounded bottom corners and adaptivity to small sizes.
    
    Closes https://gitlab.gnome.org/GNOME/nautilus/-/issues/1258

 src/nautilus-preferences-window.c               |  229 ++---
 src/resources/ui/nautilus-preferences-window.ui | 1027 +++--------------------
 2 files changed, 245 insertions(+), 1011 deletions(-)
---
diff --git a/src/nautilus-preferences-window.c b/src/nautilus-preferences-window.c
index 86de61b5e..55db3276a 100644
--- a/src/nautilus-preferences-window.c
+++ b/src/nautilus-preferences-window.c
@@ -27,6 +27,7 @@
 
 #include <gtk/gtk.h>
 #include <gio/gio.h>
+#include <libhandy-1/handy.h>
 
 #include <glib/gi18n.h>
 
@@ -37,13 +38,23 @@
 
 /* bool preferences */
 #define NAUTILUS_PREFERENCES_DIALOG_FOLDERS_FIRST_WIDGET                       \
-    "sort_folders_first_checkbutton"
+    "sort_folders_first_switch"
 #define NAUTILUS_PREFERENCES_DIALOG_DELETE_PERMANENTLY_WIDGET                  \
-    "show_delete_permanently_checkbutton"
+    "show_delete_permanently_switch"
 #define NAUTILUS_PREFERENCES_DIALOG_CREATE_LINK_WIDGET                         \
-    "show_create_link_checkbutton"
+    "show_create_link_switch"
 #define NAUTILUS_PREFERENCES_DIALOG_LIST_VIEW_USE_TREE_WIDGET                  \
-    "use_tree_view_checkbutton"
+    "use_tree_view_switch"
+
+/* combo preferences */
+#define NAUTILUS_PREFERENCES_DIALOG_OPEN_ACTION_COMBO                          \
+    "open_action_row"
+#define NAUTILUS_PREFERENCES_DIALOG_SEARCH_RECURSIVE_ROW                       \
+    "search_recursive_row"
+#define NAUTILUS_PREFERENCES_DIALOG_THUMBNAILS_ROW                       \
+    "thumbnails_row"
+#define NAUTILUS_PREFERENCES_DIALOG_COUNT_ROW                       \
+    "count_row"
 
 static const char * const speed_tradeoff_values[] =
 {
@@ -51,51 +62,39 @@ static const char * const speed_tradeoff_values[] =
     NULL
 };
 
-static const char * const click_behavior_components[] =
-{
-    "single_click_radiobutton", "double_click_radiobutton", NULL
-};
-
 static const char * const click_behavior_values[] = {"single", "double", NULL};
 
-static const char * const recursive_search_components[] =
-{
-    "search_recursive_only_this_computer_radiobutton", "search_recursive_all_locations_radiobutton", 
"search_recursive_never_radiobutton", NULL
-};
-
-static const char * const thumbnails_components[] =
-{
-    "thumbnails_only_this_computer_radiobutton", "thumbnails_all_files_radiobutton", 
"thumbnails_never_radiobutton", NULL
-};
-
-static const char * const count_components[] =
-{
-    "count_only_this_computer_radiobutton", "count_all_files_radiobutton", "count_never_radiobutton", NULL
-};
-
 static const char * const icon_captions_components[] =
 {
-    "captions_0_combobox", "captions_1_combobox", "captions_2_combobox", NULL
+    "captions_0_comborow", "captions_1_comborow", "captions_2_comborow", NULL
 };
 
 static GtkWidget *preferences_window = NULL;
 
+static void list_store_append_string (GListStore  *list_store,
+                                      const gchar *string)
+{
+    g_autoptr (HdyValueObject) obj = hdy_value_object_new_string (string);
+    g_list_store_append (list_store, obj);
+}
+
 static void free_column_names_array(GPtrArray *column_names)
 {
     g_ptr_array_foreach (column_names, (GFunc) g_free, NULL);
     g_ptr_array_free (column_names, TRUE);
 }
 
-static void create_icon_caption_combo_box_items(GtkComboBoxText *combo_box,
-                                                GList           *columns)
+static void create_icon_caption_combo_row_items(HdyComboRow *combo_row,
+                                                GList       *columns)
 {
+    GListStore *list_store = g_list_store_new (HDY_TYPE_VALUE_OBJECT);
     GList *l;
     GPtrArray *column_names;
 
     column_names = g_ptr_array_new ();
 
     /* Translators: this is referred to captions under icons. */
-    gtk_combo_box_text_append_text (combo_box, _("None"));
+    list_store_append_string (list_store, _("None"));
     g_ptr_array_add (column_names, g_strdup ("none"));
 
     for (l = columns; l != NULL; l = l->next)
@@ -116,16 +115,20 @@ static void create_icon_caption_combo_box_items(GtkComboBoxText *combo_box,
             continue;
         }
 
-        gtk_combo_box_text_append_text (combo_box, label);
+        list_store_append_string (list_store, label);
         g_ptr_array_add (column_names, name);
 
         g_free (label);
     }
-    g_object_set_data_full (G_OBJECT (combo_box), "column_names", column_names,
+    hdy_combo_row_bind_name_model (combo_row, G_LIST_MODEL (list_store),
+                                   (HdyComboRowGetNameFunc) hdy_value_object_dup_string,
+                                   NULL, NULL);
+    g_object_set_data_full (G_OBJECT (combo_row), "column_names", column_names,
                             (GDestroyNotify) free_column_names_array);
 }
 
-static void icon_captions_changed_callback(GtkComboBox *widget,
+static void icon_captions_changed_callback(HdyComboRow *widget,
+                                           GParamSpec  *pspec,
                                            gpointer     user_data)
 {
     GPtrArray *captions;
@@ -138,18 +141,18 @@ static void icon_captions_changed_callback(GtkComboBox *widget,
 
     for (i = 0; icon_captions_components[i] != NULL; i++)
     {
-        GtkWidget *combo_box;
-        int active;
+        GtkWidget *combo_row;
+        int selected_index;
         GPtrArray *column_names;
         char *name;
 
-        combo_box = GTK_WIDGET (
+        combo_row = GTK_WIDGET (
             gtk_builder_get_object (builder, icon_captions_components[i]));
-        active = gtk_combo_box_get_active (GTK_COMBO_BOX (combo_box));
+        selected_index = hdy_combo_row_get_selected_index (HDY_COMBO_ROW (combo_row));
 
-        column_names = g_object_get_data (G_OBJECT (combo_box), "column_names");
+        column_names = g_object_get_data (G_OBJECT (combo_row), "column_names");
 
-        name = g_ptr_array_index (column_names, active);
+        name = g_ptr_array_index (column_names, selected_index);
         g_ptr_array_add (captions, name);
     }
     g_ptr_array_add (captions, NULL);
@@ -160,32 +163,32 @@ static void icon_captions_changed_callback(GtkComboBox *widget,
     g_ptr_array_free (captions, TRUE);
 }
 
-static void update_caption_combo_box(GtkBuilder *builder,
-                                     const char *combo_box_name,
+static void update_caption_combo_row(GtkBuilder *builder,
+                                     const char *combo_row_name,
                                      const char *name)
 {
-    GtkWidget *combo_box;
+    GtkWidget *combo_row;
     int i;
     GPtrArray *column_names;
 
-    combo_box = GTK_WIDGET (gtk_builder_get_object (builder, combo_box_name));
+    combo_row = GTK_WIDGET (gtk_builder_get_object (builder, combo_row_name));
 
     g_signal_handlers_block_by_func (
-        combo_box, G_CALLBACK (icon_captions_changed_callback), builder);
+        combo_row, G_CALLBACK (icon_captions_changed_callback), builder);
 
-    column_names = g_object_get_data (G_OBJECT (combo_box), "column_names");
+    column_names = g_object_get_data (G_OBJECT (combo_row), "column_names");
 
     for (i = 0; i < column_names->len; ++i)
     {
         if (!strcmp (name, g_ptr_array_index (column_names, i)))
         {
-            gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), i);
+            hdy_combo_row_set_selected_index (HDY_COMBO_ROW (combo_row), i);
             break;
         }
     }
 
     g_signal_handlers_unblock_by_func (
-        combo_box, G_CALLBACK (icon_captions_changed_callback), builder);
+        combo_row, G_CALLBACK (icon_captions_changed_callback), builder);
 }
 
 static void update_icon_captions_from_settings(GtkBuilder *builder)
@@ -214,7 +217,7 @@ static void update_icon_captions_from_settings(GtkBuilder *builder)
             data = "none";
         }
 
-        update_caption_combo_box (builder, icon_captions_components[i], data);
+        update_caption_combo_row (builder, icon_captions_components[i], data);
     }
 
     g_strfreev (captions);
@@ -234,16 +237,16 @@ nautilus_preferences_window_setup_icon_caption_page (GtkBuilder *builder)
 
     for (i = 0; icon_captions_components[i] != NULL; i++)
     {
-        GtkWidget *combo_box;
+        GtkWidget *combo_row;
 
-        combo_box = GTK_WIDGET (
+        combo_row = GTK_WIDGET (
             gtk_builder_get_object (builder, icon_captions_components[i]));
 
-        create_icon_caption_combo_box_items (GTK_COMBO_BOX_TEXT (combo_box), columns);
-        gtk_widget_set_sensitive (combo_box, writable);
+        create_icon_caption_combo_row_items (HDY_COMBO_ROW (combo_row), columns);
+        gtk_widget_set_sensitive (combo_row, writable);
 
         g_signal_connect_data (
-            combo_box, "changed", G_CALLBACK (icon_captions_changed_callback),
+            combo_row, "notify::selected-index", G_CALLBACK (icon_captions_changed_callback),
             g_object_ref (builder), (GClosureNotify) g_object_unref, 0);
     }
 
@@ -261,59 +264,67 @@ static void bind_builder_bool(GtkBuilder *builder,
                      "active", G_SETTINGS_BIND_DEFAULT);
 }
 
-static GVariant *radio_mapping_set(const GValue       *gvalue,
-                                   const GVariantType *expected_type,
-                                   gpointer            user_data)
+static GVariant *combo_row_mapping_set(const GValue       *gvalue,
+                                       const GVariantType *expected_type,
+                                       gpointer            user_data)
 {
-    const gchar *widget_value = user_data;
-    GVariant *retval = NULL;
+    const gchar **values = user_data;
 
-    if (g_value_get_boolean (gvalue))
-    {
-        retval = g_variant_new_string (widget_value);
-    }
-
-    return retval;
+    return g_variant_new_string (values[g_value_get_int (gvalue)]);
 }
 
-static gboolean radio_mapping_get(GValue   *gvalue,
-                                  GVariant *variant,
-                                  gpointer  user_data)
+static gboolean combo_row_mapping_get(GValue   *gvalue,
+                                      GVariant *variant,
+                                      gpointer  user_data)
 {
-    const gchar *widget_value = user_data;
+    const gchar **values = user_data;
     const gchar *value;
 
     value = g_variant_get_string (variant, NULL);
 
-    if (g_strcmp0 (value, widget_value) == 0)
-    {
-        g_value_set_boolean (gvalue, TRUE);
-    }
-    else
+    for (int i = 0; values[i]; i++)
     {
-        g_value_set_boolean (gvalue, FALSE);
+        if (g_strcmp0 (value, values[i]) == 0)
+        {
+            g_value_set_int (gvalue, i);
+
+            return TRUE;
+        }
     }
 
-    return TRUE;
+    return FALSE;
 }
 
-static void bind_builder_radio(GtkBuilder  *builder,
-                               GSettings   *settings,
-                               const char **widget_names,
-                               const char  *prefs,
-                               const char **values)
+static void bind_builder_combo_row(GtkBuilder  *builder,
+                                   GSettings   *settings,
+                                   const char  *widget_name,
+                                   const char  *prefs,
+                                   const char **values)
 {
-    GtkWidget *button;
-    int i;
+    g_settings_bind_with_mapping (settings, prefs, gtk_builder_get_object (builder, widget_name),
+                                  "selected-index", G_SETTINGS_BIND_DEFAULT,
+                                  combo_row_mapping_get, combo_row_mapping_set,
+                                  (gpointer) values, NULL);
+}
 
-    for (i = 0; widget_names[i] != NULL; i++)
-    {
-        button = GTK_WIDGET (gtk_builder_get_object (builder, widget_names[i]));
+static void setup_combo (GtkBuilder  *builder,
+                         const char  *widget_name,
+                         const char **strings)
+{
+    HdyComboRow *combo_row;
+    GListStore *list_store;
+
+    combo_row = (HdyComboRow *) gtk_builder_get_object (builder, widget_name);
+    g_assert (HDY_IS_COMBO_ROW (combo_row));
+
+    list_store = g_list_store_new (HDY_TYPE_VALUE_OBJECT);
 
-        g_settings_bind_with_mapping (settings, prefs, button, "active",
-                                      G_SETTINGS_BIND_DEFAULT, radio_mapping_get,
-                                      radio_mapping_set, (gpointer) values[i], NULL);
+    for (gsize i = 0; strings[i]; i++)
+    {
+        list_store_append_string (list_store, strings[i]);
     }
+
+    hdy_combo_row_bind_name_model (combo_row, G_LIST_MODEL (list_store), (HdyComboRowGetNameFunc) 
hdy_value_object_dup_string, NULL, NULL);
 }
 
 static void nautilus_preferences_window_setup(GtkBuilder *builder,
@@ -321,6 +332,15 @@ static void nautilus_preferences_window_setup(GtkBuilder *builder,
 {
     GtkWidget *window;
 
+    setup_combo (builder, NAUTILUS_PREFERENCES_DIALOG_OPEN_ACTION_COMBO,
+                 (const char *[]) { _("Single click"), _("Double click"), NULL });
+    setup_combo (builder, NAUTILUS_PREFERENCES_DIALOG_SEARCH_RECURSIVE_ROW,
+                 (const char *[]) { _("On this computer only"), _("All locations"), _("Never"), NULL });
+    setup_combo (builder, NAUTILUS_PREFERENCES_DIALOG_THUMBNAILS_ROW,
+                 (const char *[]) { _("On this computer only"), _("All files"), _("Never"), NULL });
+    setup_combo (builder, NAUTILUS_PREFERENCES_DIALOG_COUNT_ROW,
+                 (const char *[]) { _("On this computer only"), _("All folders"), _("Never"), NULL });
+
     /* setup preferences */
     bind_builder_bool (builder, gtk_filechooser_preferences,
                        NAUTILUS_PREFERENCES_DIALOG_FOLDERS_FIRST_WIDGET,
@@ -335,21 +355,22 @@ static void nautilus_preferences_window_setup(GtkBuilder *builder,
                        NAUTILUS_PREFERENCES_DIALOG_DELETE_PERMANENTLY_WIDGET,
                        NAUTILUS_PREFERENCES_SHOW_DELETE_PERMANENTLY);
 
-    bind_builder_radio (
-        builder, nautilus_preferences, (const char **) click_behavior_components,
-        NAUTILUS_PREFERENCES_CLICK_POLICY, (const char **) click_behavior_values);
-    bind_builder_radio (builder, nautilus_preferences,
-                        (const char **) recursive_search_components,
-                        NAUTILUS_PREFERENCES_RECURSIVE_SEARCH,
-                        (const char **) speed_tradeoff_values);
-    bind_builder_radio (builder, nautilus_preferences,
-                        (const char **) thumbnails_components,
-                        NAUTILUS_PREFERENCES_SHOW_FILE_THUMBNAILS,
-                        (const char **) speed_tradeoff_values);
-    bind_builder_radio (builder, nautilus_preferences,
-                        (const char **) count_components,
-                        NAUTILUS_PREFERENCES_SHOW_DIRECTORY_ITEM_COUNTS,
-                        (const char **) speed_tradeoff_values);
+    bind_builder_combo_row (builder, nautilus_preferences,
+                            NAUTILUS_PREFERENCES_DIALOG_OPEN_ACTION_COMBO,
+                            NAUTILUS_PREFERENCES_CLICK_POLICY,
+                            (const char **) click_behavior_values);
+    bind_builder_combo_row (builder, nautilus_preferences,
+                            NAUTILUS_PREFERENCES_DIALOG_SEARCH_RECURSIVE_ROW,
+                            NAUTILUS_PREFERENCES_RECURSIVE_SEARCH,
+                            (const char **) speed_tradeoff_values);
+    bind_builder_combo_row (builder, nautilus_preferences,
+                            NAUTILUS_PREFERENCES_DIALOG_THUMBNAILS_ROW,
+                            NAUTILUS_PREFERENCES_SHOW_FILE_THUMBNAILS,
+                            (const char **) speed_tradeoff_values);
+    bind_builder_combo_row (builder, nautilus_preferences,
+                            NAUTILUS_PREFERENCES_DIALOG_COUNT_ROW,
+                            NAUTILUS_PREFERENCES_SHOW_DIRECTORY_ITEM_COUNTS,
+                            (const char **) speed_tradeoff_values);
 
     nautilus_preferences_window_setup_icon_caption_page (builder);
 
@@ -363,12 +384,6 @@ static void nautilus_preferences_window_setup(GtkBuilder *builder,
 
     gtk_window_set_transient_for (GTK_WINDOW (preferences_window), parent_window);
 
-    /* This statement is necessary because GtkDialog defaults to 2px. Will not
-     * be necessary in GTK+4.
-     */
-    gtk_container_set_border_width (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG 
(preferences_window))),
-                                    0);
-
     gtk_widget_show (preferences_window);
 }
 
diff --git a/src/resources/ui/nautilus-preferences-window.ui b/src/resources/ui/nautilus-preferences-window.ui
index d12ab9581..9e0fb54b5 100644
--- a/src/resources/ui/nautilus-preferences-window.ui
+++ b/src/resources/ui/nautilus-preferences-window.ui
@@ -2,954 +2,173 @@
 <!-- Generated with glade 3.22.0 -->
 <interface>
   <requires lib="gtk+" version="3.22"/>
-  <object class="GtkDialog" id="preferences_window">
-    <property name="can_focus">False</property>
-    <property name="title" translatable="yes">Preferences</property>
-    <property name="resizable">False</property>
-    <property name="modal">True</property>
-    <property name="destroy_with_parent">True</property>
-    <property name="type_hint">normal</property>
-    <child internal-child="vbox">
-      <object class="GtkBox" id="vbox">
-        <property name="can_focus">False</property>
-        <child internal-child="action_area">
-          <object class="GtkButtonBox">
-            <property name="can_focus">False</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
+  <object class="HdyPreferencesWindow" id="preferences_window">
+    <property name="search_enabled">False</property>
+    <child>
+      <object class="HdyPreferencesPage">
+        <property name="title" translatable="yes">General</property>
+        <property name="visible">True</property>
         <child>
-          <object class="GtkNotebook" id="notebook1">
+          <object class="HdyPreferencesGroup">
+            <property name="title" translatable="yes">General</property>
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="border_width">0</property>
-            <property name="show_border">False</property>
             <child>
-              <object class="GtkBox" id="vbox1">
+              <object class="HdyActionRow">
+                <property name="activatable_widget">sort_folders_first_switch</property>
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes">Sort _Folders Before Files</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">18</property>
                 <child>
-                  <object class="GtkBox" id="vbox12">
-                    <property name="visible">True</property>
+                  <object class="GtkSwitch" id="sort_folders_first_switch">
                     <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label_sort">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes" context="preferences" 
comments="Translators: a title in the preferences dialog with an option to sort folder before files 
&quot;Sort folders before files&quot;.">Sort</property>
-                        <property name="xalign">0</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                        <accessibility>
-                          <relation type="label-for" target="vbox12"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkCheckButton" id="sort_folders_first_checkbutton">
-                        <property name="label" translatable="yes">Sort _folders before files</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <accessibility>
-                      <relation type="labelled-by" target="label_sort"/>
-                    </accessibility>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="vbox12-atkobject">
-                        <property name="AtkObject::accessible-role">panel</property>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkBox" id="box1">
+                    <property name="receives_default">False</property>
+                    <property name="valign">center</property>
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label_list_view">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">List View</property>
-                        <property name="xalign">0</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                        <accessibility>
-                          <relation type="label-for" target="box1"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkCheckButton" id="use_tree_view_checkbutton">
-                        <property name="label" translatable="yes">Allow folders to be _expanded</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <accessibility>
-                      <relation type="labelled-by" target="label_list_view"/>
-                    </accessibility>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="box1-atkobject">
-                        <property name="AtkObject::accessible-role">panel</property>
-                      </object>
-                    </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">2</property>
-                  </packing>
                 </child>
+              </object>
+            </child>
+            <child>
+              <object class="HdyActionRow">
+                <property name="activatable_widget">use_tree_view_switch</property>
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes">_Expandable Folders in List View</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
+                <property name="visible">True</property>
                 <child>
-                  <object class="GtkBox" id="vbox27">
-                    <property name="visible">True</property>
+                  <object class="GtkSwitch" id="use_tree_view_switch">
                     <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label_icon_view_captions">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Icon View Captions</property>
-                        <property name="xalign">0</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                        <accessibility>
-                          <relation type="label-for" target="vbox27"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label_add_info_under">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Add information to be displayed beneath 
file and folder names. More information will appear when zooming closer.</property>
-                        <property name="wrap">True</property>
-                        <property name="max_width_chars">65</property>
-                        <property name="xalign">0</property>
-                        <accessibility>
-                          <relation type="description-for" target="captions_0_combobox"/>
-                          <relation type="description-for" target="captions_1_combobox"/>
-                          <relation type="description-for" target="captions_2_combobox"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkGrid" id="grid1">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="row_spacing">10</property>
-                        <property name="column_spacing">15</property>
-                        <child>
-                          <object class="GtkBox" id="hbox29">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <child>
-                              <object class="GtkLabel" id="captions_label_1">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="use_underline">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkComboBoxText" id="captions_0_combobox">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <accessibility>
-                                  <relation type="labelled-by" target="label_first"/>
-                                  <relation type="described-by" target="label_add_info_under"/>
-                                </accessibility>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkBox" id="hbox28">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <child>
-                              <object class="GtkLabel" id="captions_label_0">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkComboBoxText" id="captions_2_combobox">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <accessibility>
-                                  <relation type="labelled-by" target="label_third"/>
-                                  <relation type="described-by" target="label_add_info_under"/>
-                                </accessibility>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">2</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkBox" id="hbox30">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <child>
-                              <object class="GtkLabel" id="captions_label_2">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkComboBoxText" id="captions_1_combobox">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <accessibility>
-                                  <relation type="labelled-by" target="label_second"/>
-                                  <relation type="described-by" target="label_add_info_under"/>
-                                </accessibility>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label_second">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="label" translatable="yes" context="the n-th position of an icon 
caption" comments="Translators: This is an ordinal number">Second</property>
-                            <property name="xalign">1</property>
-                            <accessibility>
-                              <relation type="label-for" target="captions_1_combobox"/>
-                            </accessibility>
-                            <style>
-                              <class name="dim-label"/>
-                            </style>
-                          </object>
-                          <packing>
-                            <property name="left_attach">0</property>
-                            <property name="top_attach">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label_third">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="label" translatable="yes" context="the n-th position of an icon 
caption" comments="Translators: This is an ordinal number">Third</property>
-                            <property name="xalign">1</property>
-                            <accessibility>
-                              <relation type="label-for" target="captions_2_combobox"/>
-                            </accessibility>
-                            <style>
-                              <class name="dim-label"/>
-                            </style>
-                          </object>
-                          <packing>
-                            <property name="left_attach">0</property>
-                            <property name="top_attach">2</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label_first">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="label" translatable="yes" context="the n-th position of an icon 
caption" comments="Translators: This is an ordinal number">First</property>
-                            <property name="xalign">1</property>
-                            <accessibility>
-                              <relation type="label-for" target="captions_0_combobox"/>
-                            </accessibility>
-                            <style>
-                              <class name="dim-label"/>
-                            </style>
-                          </object>
-                          <packing>
-                            <property name="left_attach">0</property>
-                            <property name="top_attach">0</property>
-                          </packing>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">3</property>
-                      </packing>
-                    </child>
-                    <accessibility>
-                      <relation type="labelled-by" target="label_icon_view_captions"/>
-                    </accessibility>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="vbox27-atkobject">
-                        <property name="AtkObject::accessible-role">panel</property>
-                      </object>
-                    </child>
+                    <property name="receives_default">False</property>
+                    <property name="valign">center</property>
+                    <property name="visible">True</property>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">4</property>
-                  </packing>
                 </child>
               </object>
-              <packing>
-                <property name="tab_expand">True</property>
-              </packing>
             </child>
-            <child type="tab">
-              <object class="GtkLabel" id="label_views">
+            <child>
+              <object class="HdyComboRow" id="open_action_row">
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes">Action to Open Items</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes">Views</property>
               </object>
-              <packing>
-                <property name="tab_fill">False</property>
-              </packing>
             </child>
+          </object>
+        </child>
+        <child>
+          <object class="HdyPreferencesGroup">
+            <property name="title" translatable="yes">Context Menu</property>
+            <property name="visible">True</property>
             <child>
-              <object class="GtkBox" id="vbox5">
+              <object class="HdyActionRow">
+                <property name="activatable_widget">show_create_link_switch</property>
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes">Action to Create Symbolic _Links</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">10</property>
                 <child>
-                  <object class="GtkBox" id="vbox6">
-                    <property name="visible">True</property>
+                  <object class="GtkSwitch" id="show_create_link_switch">
                     <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label_open_action">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Open Action</property>
-                        <property name="xalign">0</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                        <accessibility>
-                          <relation type="label-for" target="vbox6"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="single_click_radiobutton">
-                        <property name="label" translatable="yes">_Single click to open items</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="active">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="double_click_radiobutton">
-                        <property name="label" translatable="yes">_Double click to open items</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                        <property name="group">single_click_radiobutton</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">3</property>
-                      </packing>
-                    </child>
-                    <accessibility>
-                      <relation type="labelled-by" target="label_open_action"/>
-                    </accessibility>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="vbox6-atkobject">
-                        <property name="AtkObject::accessible-role">panel</property>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkBox" id="vbox14">
+                    <property name="receives_default">False</property>
+                    <property name="valign">center</property>
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label_link_creation">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Link Creation</property>
-                        <property name="xalign">0</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                        <accessibility>
-                          <relation type="label-for" target="vbox14"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkCheckButton" id="show_create_link_checkbutton">
-                        <property name="label" translatable="yes">Show action to create symbolic 
_links</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <accessibility>
-                      <relation type="labelled-by" target="label_link_creation"/>
-                    </accessibility>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="vbox14-atkobject">
-                        <property name="AtkObject::accessible-role">panel</property>
-                      </object>
-                    </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
+              </object>
+            </child>
+            <child>
+              <object class="HdyActionRow">
+                <property name="activatable_widget">show_delete_permanently_switch</property>
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes">Action to _Permanently Delete Files and 
Folders</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
+                <property name="visible">True</property>
                 <child>
-                  <object class="GtkBox" id="vbox8">
-                    <property name="visible">True</property>
+                  <object class="GtkSwitch" id="show_delete_permanently_switch">
                     <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label_trash">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Trash</property>
-                        <property name="xalign">0</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                        <accessibility>
-                          <relation type="label-for" target="vbox8"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkCheckButton" id="show_delete_permanently_checkbutton">
-                        <property name="label" translatable="yes">Show action to _permanently delete files 
and folders</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <accessibility>
-                      <relation type="labelled-by" target="label_trash"/>
-                    </accessibility>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="vbox8-atkobject">
-                        <property name="AtkObject::accessible-role">panel</property>
-                      </object>
-                    </child>
+                    <property name="receives_default">False</property>
+                    <property name="valign">center</property>
+                    <property name="visible">True</property>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">2</property>
-                  </packing>
                 </child>
               </object>
-              <packing>
-                <property name="position">1</property>
-                <property name="tab_expand">True</property>
-              </packing>
             </child>
-            <child type="tab">
-              <object class="GtkLabel" id="label_behavior">
+          </object>
+        </child>
+        <child>
+          <object class="HdyPreferencesGroup">
+            <property name="title" translatable="yes">Performance</property>
+            <property name="visible">True</property>
+            <child>
+              <object class="HdyComboRow" id="search_recursive_row">
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes">Search in Subfolders</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes">Behavior</property>
               </object>
-              <packing>
-                <property name="position">1</property>
-                <property name="tab_fill">False</property>
-              </packing>
             </child>
             <child>
-              <object class="GtkBox" id="vbox9">
+              <object class="HdyComboRow" id="thumbnails_row">
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes">Show Thumbnails</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">18</property>
-                <child>
-                  <object class="GtkBox" id="vbox3">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label_search">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Search</property>
-                        <property name="xalign">0</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label_search_subfolders">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Search in subfolders:</property>
-                        <property name="xalign">0</property>
-                        <accessibility>
-                          <relation type="label-for" target="vbox3"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="search_recursive_only_this_computer_radiobutton">
-                        <property name="label" translatable="yes">_On this computer only</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="active">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="search_recursive_all_locations_radiobutton">
-                        <property name="label" translatable="yes">_All locations</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                        <property name="group">search_recursive_only_this_computer_radiobutton</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">3</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="search_recursive_never_radiobutton">
-                        <property name="label" translatable="yes">_Never</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                        <property name="group">search_recursive_only_this_computer_radiobutton</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">4</property>
-                      </packing>
-                    </child>
-                    <accessibility>
-                      <relation type="labelled-by" target="label_search_subfolders"/>
-                    </accessibility>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="vbox3-atkobject">
-                        <property name="AtkObject::accessible-role">panel</property>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkBox" id="vbox11">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label_thumbnails">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Thumbnails</property>
-                        <property name="xalign">0</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label_show_thumbnails">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Show thumbnails:</property>
-                        <property name="xalign">0</property>
-                        <accessibility>
-                          <relation type="label-for" target="vbox11"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="thumbnails_only_this_computer_radiobutton">
-                        <property name="label" translatable="yes">_Files on this computer only</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="active">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="thumbnails_all_files_radiobutton">
-                        <property name="label" translatable="yes">A_ll files</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                        <property name="group">thumbnails_only_this_computer_radiobutton</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">3</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="thumbnails_never_radiobutton">
-                        <property name="label" translatable="yes">N_ever</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                        <property name="group">thumbnails_only_this_computer_radiobutton</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">4</property>
-                      </packing>
-                    </child>
-                    <accessibility>
-                      <relation type="labelled-by" target="label_show_thumbnails"/>
-                    </accessibility>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="vbox11-atkobject">
-                        <property name="AtkObject::accessible-role">panel</property>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkBox" id="vbox13">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label_file_count">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">File count</property>
-                        <property name="xalign">0</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label_count_files">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Count number of files in 
folders:</property>
-                        <property name="xalign">0</property>
-                        <accessibility>
-                          <relation type="label-for" target="vbox13"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="count_only_this_computer_radiobutton">
-                        <property name="label" translatable="yes">F_olders on this computer only</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="active">True</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="count_all_files_radiobutton">
-                        <property name="label" translatable="yes">All folder_s</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                        <property name="group">count_only_this_computer_radiobutton</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">3</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="count_never_radiobutton">
-                        <property name="label" translatable="yes">Ne_ver</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">start</property>
-                        <property name="use_underline">True</property>
-                        <property name="draw_indicator">True</property>
-                        <property name="group">count_only_this_computer_radiobutton</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">4</property>
-                      </packing>
-                    </child>
-                    <accessibility>
-                      <relation type="labelled-by" target="label_count_files"/>
-                    </accessibility>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">2</property>
-                  </packing>
-                </child>
               </object>
-              <packing>
-                <property name="position">3</property>
-                <property name="tab_expand">True</property>
-              </packing>
             </child>
-            <child type="tab">
-              <object class="GtkLabel" id="label_search_preview">
+            <child>
+              <object class="HdyComboRow" id="count_row">
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes">Count Number of Files in Folders</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
+                <property name="visible">True</property>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="HdyPreferencesGroup">
+            <property name="description" translatable="yes">Add information to be displayed beneath file and 
folder names. More information will appear when zooming closer.</property>
+            <property name="title" translatable="yes">Icon View Captions</property>
+            <property name="visible">True</property>
+            <child>
+              <object class="HdyComboRow" id="captions_0_comborow">
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes" context="the n-th position of an icon caption" 
comments="Translators: This is an ordinal number">First</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
+                <property name="visible">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="HdyComboRow" id="captions_1_comborow">
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes" context="the n-th position of an icon caption" 
comments="Translators: This is an ordinal number">Second</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
+                <property name="visible">True</property>
+              </object>
+            </child>
+            <child>
+              <object class="HdyComboRow" id="captions_2_comborow">
+                <property name="subtitle_lines">0</property>
+                <property name="title" translatable="yes" context="the n-th position of an icon caption" 
comments="Translators: This is an ordinal number">Third</property>
+                <property name="title_lines">0</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes">Search &amp; Preview</property>
               </object>
-              <packing>
-                <property name="position">3</property>
-                <property name="tab_fill">False</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
         </child>
       </object>
     </child>
-    <child type="titlebar">
-      <placeholder/>
-    </child>
   </object>
 </interface>


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