Blame SOURCES/compress-dialog-Update-dialog-design.patch

6a4a9c
From e71b54bafcbfffcb352600ebff4be8776de171f9 Mon Sep 17 00:00:00 2001
6a4a9c
From: Ondrej Holy <oholy@redhat.com>
6a4a9c
Date: Fri, 30 Jul 2021 11:01:42 +0200
6a4a9c
Subject: [PATCH] compress-dialog: Update dialog design
6a4a9c
6a4a9c
Let's update the Compress dialog design as per the mockup for the
6a4a9c
encrypted archives support. The most visible change is `GtkPopover`
6a4a9c
with `HdyActionRow` rows for the format selection instead of the
6a4a9c
`GtkRadioButton` buttons.
6a4a9c
6a4a9c
https://gitlab.gnome.org/GNOME/nautilus/-/issues/822
6a4a9c
---
6a4a9c
 src/nautilus-compress-dialog-controller.c    | 132 ++++++-----
6a4a9c
 src/resources/ui/nautilus-compress-dialog.ui | 229 ++++++++++---------
6a4a9c
 2 files changed, 199 insertions(+), 162 deletions(-)
6a4a9c
6a4a9c
diff --git a/src/nautilus-compress-dialog-controller.c b/src/nautilus-compress-dialog-controller.c
6a4a9c
index d8aa792ee..154573c0f 100644
6a4a9c
--- a/src/nautilus-compress-dialog-controller.c
6a4a9c
+++ b/src/nautilus-compress-dialog-controller.c
6a4a9c
@@ -19,6 +19,7 @@
6a4a9c
 
6a4a9c
 #include <glib/gi18n.h>
6a4a9c
 #include <gnome-autoar/gnome-autoar.h>
6a4a9c
+#include <libhandy-1/handy.h>
6a4a9c
 
6a4a9c
 #include <eel/eel-vfs-extensions.h>
6a4a9c
 
6a4a9c
@@ -31,11 +32,15 @@ struct _NautilusCompressDialogController
6a4a9c
     NautilusFileNameWidgetController parent_instance;
6a4a9c
 
6a4a9c
     GtkWidget *compress_dialog;
6a4a9c
-    GtkWidget *description_stack;
6a4a9c
     GtkWidget *name_entry;
6a4a9c
-    GtkWidget *zip_radio_button;
6a4a9c
-    GtkWidget *tar_xz_radio_button;
6a4a9c
-    GtkWidget *seven_zip_radio_button;
6a4a9c
+    GtkWidget *extension_stack;
6a4a9c
+    GtkWidget *zip_label;
6a4a9c
+    GtkWidget *tar_xz_label;
6a4a9c
+    GtkWidget *seven_zip_label;
6a4a9c
+    GtkWidget *extension_popover;
6a4a9c
+    GtkWidget *zip_checkmark;
6a4a9c
+    GtkWidget *tar_xz_checkmark;
6a4a9c
+    GtkWidget *seven_zip_checkmark;
6a4a9c
 
6a4a9c
     const char *extension;
6a4a9c
 
6a4a9c
@@ -135,32 +140,32 @@ update_selected_format (NautilusCompressDialogController *self,
6a4a9c
                         NautilusCompressionFormat         format)
6a4a9c
 {
6a4a9c
     const char *extension;
6a4a9c
-    const char *description_label_name;
6a4a9c
-    GtkWidget *active_button;
6a4a9c
+    GtkWidget *active_label;
6a4a9c
+    GtkWidget *active_checkmark;
6a4a9c
 
6a4a9c
     switch (format)
6a4a9c
     {
6a4a9c
         case NAUTILUS_COMPRESSION_ZIP:
6a4a9c
         {
6a4a9c
             extension = ".zip";
6a4a9c
-            description_label_name = "zip-description-label";
6a4a9c
-            active_button = self->zip_radio_button;
6a4a9c
+            active_label = self->zip_label;
6a4a9c
+            active_checkmark = self->zip_checkmark;
6a4a9c
         }
6a4a9c
         break;
6a4a9c
 
6a4a9c
         case NAUTILUS_COMPRESSION_TAR_XZ:
6a4a9c
         {
6a4a9c
             extension = ".tar.xz";
6a4a9c
-            description_label_name = "tar-xz-description-label";
6a4a9c
-            active_button = self->tar_xz_radio_button;
6a4a9c
+            active_label = self->tar_xz_label;
6a4a9c
+            active_checkmark = self->tar_xz_checkmark;
6a4a9c
         }
6a4a9c
         break;
6a4a9c
 
6a4a9c
         case NAUTILUS_COMPRESSION_7ZIP:
6a4a9c
         {
6a4a9c
             extension = ".7z";
6a4a9c
-            description_label_name = "seven-zip-description-label";
6a4a9c
-            active_button = self->seven_zip_radio_button;
6a4a9c
+            active_label = self->seven_zip_label;
6a4a9c
+            active_checkmark = self->seven_zip_checkmark;
6a4a9c
         }
6a4a9c
         break;
6a4a9c
 
6a4a9c
@@ -173,11 +178,21 @@ update_selected_format (NautilusCompressDialogController *self,
6a4a9c
 
6a4a9c
     self->extension = extension;
6a4a9c
 
6a4a9c
-    gtk_stack_set_visible_child_name (GTK_STACK (self->description_stack),
6a4a9c
-                                      description_label_name);
6a4a9c
-
6a4a9c
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (active_button),
6a4a9c
-                                  TRUE);
6a4a9c
+    gtk_stack_set_visible_child (GTK_STACK (self->extension_stack),
6a4a9c
+                                 active_label);
6a4a9c
+
6a4a9c
+    gtk_image_set_from_icon_name (GTK_IMAGE (self->zip_checkmark),
6a4a9c
+                                  NULL,
6a4a9c
+                                  GTK_ICON_SIZE_BUTTON);
6a4a9c
+    gtk_image_set_from_icon_name (GTK_IMAGE (self->tar_xz_checkmark),
6a4a9c
+                                  NULL,
6a4a9c
+                                  GTK_ICON_SIZE_BUTTON);
6a4a9c
+    gtk_image_set_from_icon_name (GTK_IMAGE (self->seven_zip_checkmark),
6a4a9c
+                                  NULL,
6a4a9c
+                                  GTK_ICON_SIZE_BUTTON);
6a4a9c
+    gtk_image_set_from_icon_name (GTK_IMAGE (active_checkmark),
6a4a9c
+                                  "object-select-symbolic",
6a4a9c
+                                  GTK_ICON_SIZE_BUTTON);
6a4a9c
 
6a4a9c
     g_settings_set_enum (nautilus_compression_preferences,
6a4a9c
                          NAUTILUS_PREFERENCES_DEFAULT_COMPRESSION_FORMAT,
6a4a9c
@@ -189,52 +204,40 @@ update_selected_format (NautilusCompressDialogController *self,
6a4a9c
 }
6a4a9c
 
6a4a9c
 static void
6a4a9c
-zip_radio_button_on_toggled (GtkToggleButton *toggle_button,
6a4a9c
-                             gpointer         user_data)
6a4a9c
+zip_row_on_activated (HdyActionRow *row,
6a4a9c
+                      gpointer      user_data)
6a4a9c
 {
6a4a9c
     NautilusCompressDialogController *controller;
6a4a9c
 
6a4a9c
     controller = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (user_data);
6a4a9c
 
6a4a9c
-    if (!gtk_toggle_button_get_active (toggle_button))
6a4a9c
-    {
6a4a9c
-        return;
6a4a9c
-    }
6a4a9c
-
6a4a9c
+    gtk_popover_popdown (GTK_POPOVER (controller->extension_popover));
6a4a9c
     update_selected_format (controller,
6a4a9c
                             NAUTILUS_COMPRESSION_ZIP);
6a4a9c
 }
6a4a9c
 
6a4a9c
 static void
6a4a9c
-tar_xz_radio_button_on_toggled (GtkToggleButton *toggle_button,
6a4a9c
-                                gpointer         user_data)
6a4a9c
+tar_xz_row_on_activated (HdyActionRow *row,
6a4a9c
+                         gpointer      user_data)
6a4a9c
 {
6a4a9c
     NautilusCompressDialogController *controller;
6a4a9c
 
6a4a9c
     controller = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (user_data);
6a4a9c
 
6a4a9c
-    if (!gtk_toggle_button_get_active (toggle_button))
6a4a9c
-    {
6a4a9c
-        return;
6a4a9c
-    }
6a4a9c
-
6a4a9c
+    gtk_popover_popdown (GTK_POPOVER (controller->extension_popover));
6a4a9c
     update_selected_format (controller,
6a4a9c
                             NAUTILUS_COMPRESSION_TAR_XZ);
6a4a9c
 }
6a4a9c
 
6a4a9c
 static void
6a4a9c
-seven_zip_radio_button_on_toggled (GtkToggleButton *toggle_button,
6a4a9c
-                                   gpointer         user_data)
6a4a9c
+seven_zip_row_on_activated (HdyActionRow *row,
6a4a9c
+                            gpointer      user_data)
6a4a9c
 {
6a4a9c
     NautilusCompressDialogController *controller;
6a4a9c
 
6a4a9c
     controller = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (user_data);
6a4a9c
 
6a4a9c
-    if (!gtk_toggle_button_get_active (toggle_button))
6a4a9c
-    {
6a4a9c
-        return;
6a4a9c
-    }
6a4a9c
-
6a4a9c
+    gtk_popover_popdown (GTK_POPOVER (controller->extension_popover));
6a4a9c
     update_selected_format (controller,
6a4a9c
                             NAUTILUS_COMPRESSION_7ZIP);
6a4a9c
 }
6a4a9c
@@ -251,10 +254,14 @@ nautilus_compress_dialog_controller_new (GtkWindow         *parent_window,
6a4a9c
     GtkWidget *error_label;
6a4a9c
     GtkWidget *name_entry;
6a4a9c
     GtkWidget *activate_button;
6a4a9c
-    GtkWidget *description_stack;
6a4a9c
-    GtkWidget *zip_radio_button;
6a4a9c
-    GtkWidget *tar_xz_radio_button;
6a4a9c
-    GtkWidget *seven_zip_radio_button;
6a4a9c
+    GtkWidget *extension_stack;
6a4a9c
+    GtkWidget *zip_label;
6a4a9c
+    GtkWidget *tar_xz_label;
6a4a9c
+    GtkWidget *seven_zip_label;
6a4a9c
+    GtkWidget *extension_popover;
6a4a9c
+    GtkWidget *zip_checkmark;
6a4a9c
+    GtkWidget *tar_xz_checkmark;
6a4a9c
+    GtkWidget *seven_zip_checkmark;
6a4a9c
     NautilusCompressionFormat format;
6a4a9c
 
6a4a9c
     builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/ui/nautilus-compress-dialog.ui");
6a4a9c
@@ -263,10 +270,14 @@ nautilus_compress_dialog_controller_new (GtkWindow         *parent_window,
6a4a9c
     error_label = GTK_WIDGET (gtk_builder_get_object (builder, "error_label"));
6a4a9c
     name_entry = GTK_WIDGET (gtk_builder_get_object (builder, "name_entry"));
6a4a9c
     activate_button = GTK_WIDGET (gtk_builder_get_object (builder, "activate_button"));
6a4a9c
-    zip_radio_button = GTK_WIDGET (gtk_builder_get_object (builder, "zip_radio_button"));
6a4a9c
-    tar_xz_radio_button = GTK_WIDGET (gtk_builder_get_object (builder, "tar_xz_radio_button"));
6a4a9c
-    seven_zip_radio_button = GTK_WIDGET (gtk_builder_get_object (builder, "seven_zip_radio_button"));
6a4a9c
-    description_stack = GTK_WIDGET (gtk_builder_get_object (builder, "description_stack"));
6a4a9c
+    extension_stack = GTK_WIDGET (gtk_builder_get_object (builder, "extension_stack"));
6a4a9c
+    zip_label = GTK_WIDGET (gtk_builder_get_object (builder, "zip_label"));
6a4a9c
+    tar_xz_label = GTK_WIDGET (gtk_builder_get_object (builder, "tar_xz_label"));
6a4a9c
+    seven_zip_label = GTK_WIDGET (gtk_builder_get_object (builder, "seven_zip_label"));
6a4a9c
+    extension_popover = GTK_WIDGET (gtk_builder_get_object (builder, "extension_popover"));
6a4a9c
+    zip_checkmark = GTK_WIDGET (gtk_builder_get_object (builder, "zip_checkmark"));
6a4a9c
+    tar_xz_checkmark = GTK_WIDGET (gtk_builder_get_object (builder, "tar_xz_checkmark"));
6a4a9c
+    seven_zip_checkmark = GTK_WIDGET (gtk_builder_get_object (builder, "seven_zip_checkmark"));
6a4a9c
 
6a4a9c
     gtk_window_set_transient_for (GTK_WINDOW (compress_dialog),
6a4a9c
                                   parent_window);
6a4a9c
@@ -279,10 +290,15 @@ nautilus_compress_dialog_controller_new (GtkWindow         *parent_window,
6a4a9c
                          "containing-directory", destination_directory, NULL);
6a4a9c
 
6a4a9c
     self->compress_dialog = compress_dialog;
6a4a9c
-    self->zip_radio_button = zip_radio_button;
6a4a9c
-    self->tar_xz_radio_button = tar_xz_radio_button;
6a4a9c
-    self->seven_zip_radio_button = seven_zip_radio_button;
6a4a9c
-    self->description_stack = description_stack;
6a4a9c
+    self->extension_stack = extension_stack;
6a4a9c
+    self->zip_label = zip_label;
6a4a9c
+    self->tar_xz_label = tar_xz_label;
6a4a9c
+    self->seven_zip_label = seven_zip_label;
6a4a9c
+    self->name_entry = name_entry;
6a4a9c
+    self->extension_popover = extension_popover;
6a4a9c
+    self->zip_checkmark = zip_checkmark;
6a4a9c
+    self->tar_xz_checkmark = tar_xz_checkmark;
6a4a9c
+    self->seven_zip_checkmark = seven_zip_checkmark;
6a4a9c
     self->name_entry = name_entry;
6a4a9c
 
6a4a9c
     self->response_handler_id = g_signal_connect (compress_dialog,
6a4a9c
@@ -291,20 +307,18 @@ nautilus_compress_dialog_controller_new (GtkWindow         *parent_window,
6a4a9c
                                                   self);
6a4a9c
 
6a4a9c
     gtk_builder_add_callback_symbols (builder,
6a4a9c
-                                      "zip_radio_button_on_toggled",
6a4a9c
-                                      G_CALLBACK (zip_radio_button_on_toggled),
6a4a9c
-                                      "tar_xz_radio_button_on_toggled",
6a4a9c
-                                      G_CALLBACK (tar_xz_radio_button_on_toggled),
6a4a9c
-                                      "seven_zip_radio_button_on_toggled",
6a4a9c
-                                      G_CALLBACK (seven_zip_radio_button_on_toggled),
6a4a9c
+                                      "zip_row_on_activated",
6a4a9c
+                                      G_CALLBACK (zip_row_on_activated),
6a4a9c
+                                      "tar_xz_row_on_activated",
6a4a9c
+                                      G_CALLBACK (tar_xz_row_on_activated),
6a4a9c
+                                      "seven_zip_row_on_activated",
6a4a9c
+                                      G_CALLBACK (seven_zip_row_on_activated),
6a4a9c
                                       NULL);
6a4a9c
     gtk_builder_connect_signals (builder, self);
6a4a9c
 
6a4a9c
     format = g_settings_get_enum (nautilus_compression_preferences,
6a4a9c
                                   NAUTILUS_PREFERENCES_DEFAULT_COMPRESSION_FORMAT);
6a4a9c
 
6a4a9c
-    update_selected_format (self, format);
6a4a9c
-
6a4a9c
     if (initial_name != NULL)
6a4a9c
     {
6a4a9c
         gtk_entry_set_text (GTK_ENTRY (name_entry), initial_name);
6a4a9c
@@ -312,6 +326,8 @@ nautilus_compress_dialog_controller_new (GtkWindow         *parent_window,
6a4a9c
 
6a4a9c
     gtk_widget_show_all (compress_dialog);
6a4a9c
 
6a4a9c
+    update_selected_format (self, format);
6a4a9c
+
6a4a9c
     return self;
6a4a9c
 }
6a4a9c
 
6a4a9c
diff --git a/src/resources/ui/nautilus-compress-dialog.ui b/src/resources/ui/nautilus-compress-dialog.ui
6a4a9c
index 526e9eed2..b36539294 100644
6a4a9c
--- a/src/resources/ui/nautilus-compress-dialog.ui
6a4a9c
+++ b/src/resources/ui/nautilus-compress-dialog.ui
6a4a9c
@@ -1,6 +1,70 @@
6a4a9c
 
6a4a9c
 <interface>
6a4a9c
   <requires lib="gtk+" version="3.14"/>
6a4a9c
+  <object class="GtkPopover" id="extension_popover">
6a4a9c
+    <property name="position">bottom</property>
6a4a9c
+    <property name="constrain-to">none</property>
6a4a9c
+    <child>
6a4a9c
+      <object class="HdyPreferencesGroup">
6a4a9c
+        <property name="visible">True</property>
6a4a9c
+        <property name="margin-top">12</property>
6a4a9c
+        <property name="margin-bottom">12</property>
6a4a9c
+        <property name="margin-start">12</property>
6a4a9c
+        <property name="margin-end">12</property>
6a4a9c
+        <child>
6a4a9c
+          <object class="HdyActionRow">
6a4a9c
+            <property name="visible">True</property>
6a4a9c
+            <property name="activatable">True</property>
6a4a9c
+            <property name="title" translatable="no">.zip</property>
6a4a9c
+            <property name="subtitle" translatable="yes">Compatible with all operating systems.</property>
6a4a9c
+            <signal name="activated" handler="zip_row_on_activated"/>
6a4a9c
+            <child>
6a4a9c
+              <object class="GtkImage" id="zip_checkmark">
6a4a9c
+                <property name="visible">True</property>
6a4a9c
+                <property name="width-request">16</property>
6a4a9c
+                <property name="margin-start">12</property>
6a4a9c
+                <property name="margin-end">12</property>
6a4a9c
+              </object>
6a4a9c
+            </child>
6a4a9c
+          </object>
6a4a9c
+        </child>
6a4a9c
+        <child>
6a4a9c
+          <object class="HdyActionRow">
6a4a9c
+            <property name="visible">True</property>
6a4a9c
+            <property name="activatable">True</property>
6a4a9c
+            <property name="title" translatable="no">.tar.xz</property>
6a4a9c
+            <property name="subtitle" translatable="yes">Smaller archives but Linux and Mac only.</property>
6a4a9c
+            <signal name="activated" handler="tar_xz_row_on_activated"/>
6a4a9c
+            <child>
6a4a9c
+              <object class="GtkImage" id="tar_xz_checkmark">
6a4a9c
+                <property name="visible">True</property>
6a4a9c
+                <property name="width-request">16</property>
6a4a9c
+                <property name="margin-start">12</property>
6a4a9c
+                <property name="margin-end">12</property>
6a4a9c
+              </object>
6a4a9c
+            </child>
6a4a9c
+          </object>
6a4a9c
+        </child>
6a4a9c
+        <child>
6a4a9c
+          <object class="HdyActionRow">
6a4a9c
+            <property name="visible">True</property>
6a4a9c
+            <property name="activatable">True</property>
6a4a9c
+            <property name="title" translatable="no">.7z</property>
6a4a9c
+            <property name="subtitle" translatable="yes">Smaller archives but must be installed on Windows and Mac.</property>
6a4a9c
+            <signal name="activated" handler="seven_zip_row_on_activated"/>
6a4a9c
+            <child>
6a4a9c
+              <object class="GtkImage" id="seven_zip_checkmark">
6a4a9c
+                <property name="visible">True</property>
6a4a9c
+                <property name="width-request">16</property>
6a4a9c
+                <property name="margin-start">12</property>
6a4a9c
+                <property name="margin-end">12</property>
6a4a9c
+              </object>
6a4a9c
+            </child>
6a4a9c
+          </object>
6a4a9c
+        </child>
6a4a9c
+      </object>
6a4a9c
+    </child>
6a4a9c
+  </object>
6a4a9c
   <object class="GtkDialog" id="compress_dialog">
6a4a9c
     <property name="title" translatable="yes">Create Archive</property>
6a4a9c
     <property name="resizable">False</property>
6a4a9c
@@ -9,19 +73,26 @@
6a4a9c
     <property name="destroy_with_parent">True</property>
6a4a9c
     <property name="type_hint">dialog</property>
6a4a9c
     <property name="use-header-bar">1</property>
6a4a9c
+    <property name="default-width">500</property>
6a4a9c
+    <property name="default-height">210</property>
6a4a9c
     <child internal-child="vbox">
6a4a9c
       <object class="GtkBox" id="vbox">
6a4a9c
         <property name="orientation">vertical</property>
6a4a9c
-        <property name="margin_top">18</property>
6a4a9c
-        <property name="margin_bottom">12</property>
6a4a9c
-        <property name="margin_start">18</property>
6a4a9c
-        <property name="margin_end">18</property>
6a4a9c
+        <property name="margin-top">30</property>
6a4a9c
+        <property name="margin-bottom">30</property>
6a4a9c
+        <property name="margin-start">30</property>
6a4a9c
+        <property name="margin-end">30</property>
6a4a9c
+        <property name="width-request">390</property>
6a4a9c
+        <property name="halign">center</property>
6a4a9c
         <property name="spacing">6</property>
6a4a9c
         <child>
6a4a9c
           <object class="GtkLabel" id="name_label">
6a4a9c
             <property name="label" translatable="yes">Archive name</property>
6a4a9c
             <property name="visible">True</property>
6a4a9c
             <property name="xalign">0</property>
6a4a9c
+            <attributes>
6a4a9c
+              <attribute name="weight" value="bold"/>
6a4a9c
+            </attributes>
6a4a9c
           </object>
6a4a9c
           <packing>
6a4a9c
             <property name="expand">False</property>
6a4a9c
@@ -30,132 +101,82 @@
6a4a9c
           </packing>
6a4a9c
         </child>
6a4a9c
         <child>
6a4a9c
-          <object class="GtkEntry" id="name_entry">
6a4a9c
-            <property name="visible">True</property>
6a4a9c
-            <property name="can_focus">True</property>
6a4a9c
-          </object>
6a4a9c
-          <packing>
6a4a9c
-            <property name="expand">False</property>
6a4a9c
-            <property name="fill">True</property>
6a4a9c
-            <property name="position">2</property>
6a4a9c
-          </packing>
6a4a9c
-        </child>
6a4a9c
-        <child>
6a4a9c
-          <object class="GtkRevealer" id="error_revealer">
6a4a9c
-            <child>
6a4a9c
-              <object class="GtkLabel" id="error_label">
6a4a9c
-                <property name="margin_top">4</property>
6a4a9c
-                <property name="margin_bottom">4</property>
6a4a9c
-                <property name="visible">True</property>
6a4a9c
-                <property name="xalign">0</property>
6a4a9c
-              </object>
6a4a9c
-            </child>
6a4a9c
-          </object>
6a4a9c
-          <packing>
6a4a9c
-            <property name="expand">False</property>
6a4a9c
-            <property name="fill">True</property>
6a4a9c
-            <property name="position">3</property>
6a4a9c
-          </packing>
6a4a9c
-        </child>
6a4a9c
-        <child>
6a4a9c
-          <object class="GtkBox" id="hbox">
6a4a9c
+          <object class="GtkBox">
6a4a9c
             <property name="orientation">horizontal</property>
6a4a9c
-            <property name="homogeneous">True</property>
6a4a9c
-            <property name="spacing">0</property>
6a4a9c
-            <child>
6a4a9c
-              <object class="GtkRadioButton" id="zip_radio_button">
6a4a9c
-                <property name="label" translatable="no">.zip</property>
6a4a9c
-                <property name="draw_indicator">True</property>
6a4a9c
-                <signal name="toggled" handler="zip_radio_button_on_toggled"/>
6a4a9c
-              </object>
6a4a9c
-              <packing>
6a4a9c
-                <property name="expand">True</property>
6a4a9c
-                <property name="fill">True</property>
6a4a9c
-                <property name="position">0</property>
6a4a9c
-              </packing>
6a4a9c
-            </child>
6a4a9c
+            <property name="spacing">12</property>
6a4a9c
             <child>
6a4a9c
-              <object class="GtkRadioButton" id="tar_xz_radio_button">
6a4a9c
-                <property name="label" translatable="no">.tar.xz</property>
6a4a9c
-                <property name="group">zip_radio_button</property>
6a4a9c
-                <property name="draw_indicator">True</property>
6a4a9c
-                <signal name="toggled" handler="tar_xz_radio_button_on_toggled"/>
6a4a9c
+              <object class="GtkEntry" id="name_entry">
6a4a9c
+                <property name="visible">True</property>
6a4a9c
+                <property name="can_focus">True</property>
6a4a9c
+                <property name="width-chars">30</property>
6a4a9c
               </object>
6a4a9c
               <packing>
6a4a9c
                 <property name="expand">True</property>
6a4a9c
-                <property name="fill">True</property>
6a4a9c
-                <property name="position">1</property>
6a4a9c
               </packing>
6a4a9c
             </child>
6a4a9c
             <child>
6a4a9c
-              <object class="GtkRadioButton" id="seven_zip_radio_button">
6a4a9c
-                <property name="label" translatable="no">.7z</property>
6a4a9c
-                <property name="group">zip_radio_button</property>
6a4a9c
-                <property name="draw_indicator">True</property>
6a4a9c
-                <signal name="toggled" handler="seven_zip_radio_button_on_toggled"/>
6a4a9c
+              <object class="GtkMenuButton" id="extension_button">
6a4a9c
+                <property name="popover">extension_popover</property>
6a4a9c
+                <child>
6a4a9c
+                  <object class="GtkBox">
6a4a9c
+                    <property name="orientation">horizontal</property>
6a4a9c
+                    <property name="spacing">6</property>
6a4a9c
+                    <child>
6a4a9c
+                      <object class="GtkStack" id="extension_stack">
6a4a9c
+                        <child>
6a4a9c
+                          <object class="GtkLabel" id="zip_label">
6a4a9c
+                            <property name="label" translatable="no">.zip</property>
6a4a9c
+                            <property name="xalign">0</property>
6a4a9c
+                          </object>
6a4a9c
+                        </child>
6a4a9c
+                        <child>
6a4a9c
+                          <object class="GtkLabel" id="tar_xz_label">
6a4a9c
+                            <property name="label" translatable="no">.tar.xz</property>
6a4a9c
+                            <property name="xalign">0</property>
6a4a9c
+                          </object>
6a4a9c
+                        </child>
6a4a9c
+                        <child>
6a4a9c
+                          <object class="GtkLabel" id="seven_zip_label">
6a4a9c
+                            <property name="label" translatable="no">.7z</property>
6a4a9c
+                            <property name="xalign">0</property>
6a4a9c
+                          </object>
6a4a9c
+                        </child>
6a4a9c
+                      </object>
6a4a9c
+                      <packing>
6a4a9c
+                        <property name="expand">True</property>
6a4a9c
+                      </packing>
6a4a9c
+                    </child>
6a4a9c
+                    <child>
6a4a9c
+                      <object class="GtkImage">
6a4a9c
+                        <property name="icon-name">pan-down-symbolic</property>
6a4a9c
+                      </object>
6a4a9c
+                    </child>
6a4a9c
+                  </object>
6a4a9c
+                </child>
6a4a9c
               </object>
6a4a9c
-              <packing>
6a4a9c
-                <property name="expand">True</property>
6a4a9c
-                <property name="fill">True</property>
6a4a9c
-                <property name="position">2</property>
6a4a9c
-              </packing>
6a4a9c
             </child>
6a4a9c
           </object>
6a4a9c
           <packing>
6a4a9c
             <property name="expand">False</property>
6a4a9c
             <property name="fill">True</property>
6a4a9c
-            <property name="position">4</property>
6a4a9c
+            <property name="position">2</property>
6a4a9c
           </packing>
6a4a9c
         </child>
6a4a9c
         <child>
6a4a9c
-          <object class="GtkStack" id="description_stack">
6a4a9c
-            <property name="visible">True</property>
6a4a9c
-            <property name="can_focus">False</property>
6a4a9c
-            <property name="homogeneous">True</property>
6a4a9c
-            <child>
6a4a9c
-              <object class="GtkLabel" id="zip_description_label">
6a4a9c
-                <property name="visible">True</property>
6a4a9c
-                <property name="label" translatable="yes">Compatible with all operating systems.</property>
6a4a9c
-                <property name="xalign">0</property>
6a4a9c
-                <style>
6a4a9c
-                  <class name="dim-label"/>
6a4a9c
-                </style>
6a4a9c
-              </object>
6a4a9c
-              <packing>
6a4a9c
-                <property name="name">zip-description-label</property>
6a4a9c
-              </packing>
6a4a9c
-            </child>
6a4a9c
-            <child>
6a4a9c
-              <object class="GtkLabel" id="tar_xz_description_label">
6a4a9c
-                <property name="visible">True</property>
6a4a9c
-                <property name="label" translatable="yes">Smaller archives but Linux and Mac only.</property>
6a4a9c
-                <property name="xalign">0</property>
6a4a9c
-                <style>
6a4a9c
-                  <class name="dim-label"/>
6a4a9c
-                </style>
6a4a9c
-              </object>
6a4a9c
-              <packing>
6a4a9c
-                <property name="name">tar-xz-description-label</property>
6a4a9c
-              </packing>
6a4a9c
-            </child>
6a4a9c
+          <object class="GtkRevealer" id="error_revealer">
6a4a9c
             <child>
6a4a9c
-              <object class="GtkLabel" id="seven_zip_description_label">
6a4a9c
+              <object class="GtkLabel" id="error_label">
6a4a9c
+                <property name="margin_top">4</property>
6a4a9c
+                <property name="margin_bottom">4</property>
6a4a9c
                 <property name="visible">True</property>
6a4a9c
-                <property name="label" translatable="yes">Smaller archives but must be installed on Windows and Mac.</property>
6a4a9c
                 <property name="xalign">0</property>
6a4a9c
-                <style>
6a4a9c
-                  <class name="dim-label"/>
6a4a9c
-                </style>
6a4a9c
               </object>
6a4a9c
-              <packing>
6a4a9c
-                <property name="name">seven-zip-description-label</property>
6a4a9c
-              </packing>
6a4a9c
             </child>
6a4a9c
           </object>
6a4a9c
           <packing>
6a4a9c
             <property name="expand">False</property>
6a4a9c
             <property name="fill">True</property>
6a4a9c
-            <property name="position">5</property>
6a4a9c
+            <property name="position">3</property>
6a4a9c
           </packing>
6a4a9c
         </child>
6a4a9c
       </object>
6a4a9c
-- 
6a4a9c
2.31.1
6a4a9c