[nautilus] compress-dialog: Set keyboard focus on the row with the selected archive format
- From: António Fernandes <antoniof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] compress-dialog: Set keyboard focus on the row with the selected archive format
- Date: Sat, 18 Sep 2021 14:16:32 +0000 (UTC)
commit f3b1a749669c241ae3802e72a22a4eb7d1a44eed
Author: Clyde Laforge <clyde laforge protonmail ch>
Date: Mon Aug 16 14:41:39 2021 +0200
compress-dialog: Set keyboard focus on the row with the selected archive format
Currently the keyboard focus for the type of archive choice is always on
the first element.
This patch allows the focus to be on the currently selected item instead.
Fixes https://gitlab.gnome.org/GNOME/nautilus/-/issues/1944
src/nautilus-compress-dialog-controller.c | 62 ++++++++++++++++++++++++++++
src/resources/ui/nautilus-compress-dialog.ui | 7 ++--
2 files changed, 66 insertions(+), 3 deletions(-)
---
diff --git a/src/nautilus-compress-dialog-controller.c b/src/nautilus-compress-dialog-controller.c
index e1ba5a803..3f7711ccb 100644
--- a/src/nautilus-compress-dialog-controller.c
+++ b/src/nautilus-compress-dialog-controller.c
@@ -36,9 +36,13 @@ struct _NautilusCompressDialogController
GtkWidget *error_label;
GtkWidget *name_entry;
GtkWidget *extension_stack;
+ GtkWidget *zip_row;
GtkWidget *zip_label;
+ GtkWidget *encrypted_zip_row;
GtkWidget *encrypted_zip_label;
+ GtkWidget *tar_xz_row;
GtkWidget *tar_xz_label;
+ GtkWidget *seven_zip_row;
GtkWidget *seven_zip_label;
GtkWidget *extension_popover;
GtkWidget *zip_checkmark;
@@ -348,6 +352,50 @@ activate_button_on_sensitive_notify (GObject *gobject,
}
}
+static void
+popover_on_show (GtkWidget *widget,
+ gpointer user_data)
+{
+ NautilusCompressDialogController *self;
+ NautilusCompressionFormat format;
+
+ self = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (user_data);
+ format = g_settings_get_enum (nautilus_compression_preferences,
+ NAUTILUS_PREFERENCES_DEFAULT_COMPRESSION_FORMAT);
+ switch (format)
+ {
+ case NAUTILUS_COMPRESSION_ZIP:
+ {
+ gtk_widget_grab_focus (self->zip_row);
+ }
+ break;
+
+ case NAUTILUS_COMPRESSION_ENCRYPTED_ZIP:
+ {
+ gtk_widget_grab_focus (self->encrypted_zip_row);
+ }
+ break;
+
+ case NAUTILUS_COMPRESSION_TAR_XZ:
+ {
+ gtk_widget_grab_focus (self->tar_xz_row);
+ }
+ break;
+
+ case NAUTILUS_COMPRESSION_7ZIP:
+ {
+ gtk_widget_grab_focus (self->seven_zip_row);
+ }
+ break;
+
+ default:
+ {
+ g_assert_not_reached ();
+ }
+ break;
+ }
+}
+
NautilusCompressDialogController *
nautilus_compress_dialog_controller_new (GtkWindow *parent_window,
NautilusDirectory *destination_directory,
@@ -361,9 +409,13 @@ nautilus_compress_dialog_controller_new (GtkWindow *parent_window,
GtkWidget *name_entry;
GtkWidget *activate_button;
GtkWidget *extension_stack;
+ GtkWidget *zip_row;
GtkWidget *zip_label;
+ GtkWidget *encrypted_zip_row;
GtkWidget *encrypted_zip_label;
+ GtkWidget *tar_xz_row;
GtkWidget *tar_xz_label;
+ GtkWidget *seven_zip_row;
GtkWidget *seven_zip_label;
GtkWidget *extension_popover;
GtkWidget *zip_checkmark;
@@ -392,6 +444,10 @@ nautilus_compress_dialog_controller_new (GtkWindow *parent_window,
seven_zip_checkmark = GTK_WIDGET (gtk_builder_get_object (builder, "seven_zip_checkmark"));
passphrase_label = GTK_WIDGET (gtk_builder_get_object (builder, "passphrase_label"));
passphrase_entry = GTK_WIDGET (gtk_builder_get_object (builder, "passphrase_entry"));
+ zip_row = GTK_WIDGET (gtk_builder_get_object (builder, "zip_row"));
+ encrypted_zip_row = GTK_WIDGET (gtk_builder_get_object (builder, "encrypted_zip_row"));
+ tar_xz_row = GTK_WIDGET (gtk_builder_get_object (builder, "tar_xz_row"));
+ seven_zip_row = GTK_WIDGET (gtk_builder_get_object (builder, "seven_zip_row"));
gtk_window_set_transient_for (GTK_WINDOW (compress_dialog),
parent_window);
@@ -420,6 +476,10 @@ nautilus_compress_dialog_controller_new (GtkWindow *parent_window,
self->name_entry = name_entry;
self->passphrase_label = passphrase_label;
self->passphrase_entry = passphrase_entry;
+ self->zip_row = zip_row;
+ self->encrypted_zip_row = encrypted_zip_row;
+ self->tar_xz_row = tar_xz_row;
+ self->seven_zip_row = seven_zip_row;
self->response_handler_id = g_signal_connect (compress_dialog,
"response",
@@ -441,6 +501,8 @@ nautilus_compress_dialog_controller_new (GtkWindow *parent_window,
G_CALLBACK (passphrase_entry_on_icon_press),
"activate_button_on_sensitive_notify",
G_CALLBACK (activate_button_on_sensitive_notify),
+ "popover_on_show",
+ G_CALLBACK (popover_on_show),
NULL);
gtk_builder_connect_signals (builder, self);
diff --git a/src/resources/ui/nautilus-compress-dialog.ui b/src/resources/ui/nautilus-compress-dialog.ui
index a57765eed..a6bf9c1fb 100644
--- a/src/resources/ui/nautilus-compress-dialog.ui
+++ b/src/resources/ui/nautilus-compress-dialog.ui
@@ -2,6 +2,7 @@
<interface>
<requires lib="gtk+" version="3.14"/>
<object class="GtkPopover" id="extension_popover">
+ <signal name="show" handler="popover_on_show"/>
<property name="position">bottom</property>
<property name="constrain-to">none</property>
<child>
@@ -12,7 +13,7 @@
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<child>
- <object class="HdyActionRow">
+ <object class="HdyActionRow" id="zip_row">
<property name="visible">True</property>
<property name="activatable">True</property>
<property name="title" translatable="no">.zip</property>
@@ -49,7 +50,7 @@
</object>
</child>
<child>
- <object class="HdyActionRow">
+ <object class="HdyActionRow" id="tar_xz_row">
<property name="visible">True</property>
<property name="activatable">True</property>
<property name="title" translatable="no">.tar.xz</property>
@@ -66,7 +67,7 @@
</object>
</child>
<child>
- <object class="HdyActionRow">
+ <object class="HdyActionRow" id="seven_zip_row">
<property name="visible">True</property>
<property name="activatable">True</property>
<property name="title" translatable="no">.7z</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]