diff options
author | Clyde Laforge <clyde.laforge@protonmail.ch> | 2021-08-16 14:41:39 +0200 |
---|---|---|
committer | António Fernandes <antoniojpfernandes@gmail.com> | 2021-09-18 14:11:30 +0000 |
commit | f3b1a749669c241ae3802e72a22a4eb7d1a44eed (patch) | |
tree | 3dc96b51a2c049be06e3695c52f3c75e2a6b5658 | |
parent | e607df6c2056b24ee3fa2a7ad4bdb900b86e2d11 (diff) | |
download | nautilus-f3b1a749669c241ae3802e72a22a4eb7d1a44eed.tar.gz |
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
-rw-r--r-- | src/nautilus-compress-dialog-controller.c | 62 | ||||
-rw-r--r-- | 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> |