From ec7fa2529ba1c396b2afc780af60124384984ee5 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 7 Oct 2021 16:21:21 +0100 Subject: [PATCH] libmalcontent-ui: Improve keynav between listboxes Fix using the up and down keys to change the keyboard focus between rows between the listboxes. Previously, keynav would fail at the bottom of the first listbox, and at the top of the second. Signed-off-by: Philip Withnall --- libmalcontent-ui/user-controls.c | 26 ++++++++++++++++++++++++++ libmalcontent-ui/user-controls.ui | 2 ++ 2 files changed, 28 insertions(+) diff --git a/libmalcontent-ui/user-controls.c b/libmalcontent-ui/user-controls.c index ffeebcc..ad6a3a8 100644 --- a/libmalcontent-ui/user-controls.c +++ b/libmalcontent-ui/user-controls.c @@ -711,6 +711,31 @@ list_box_header_func (GtkListBoxRow *row, } } +static gboolean +on_keynav_failed (GtkWidget *listbox, + GtkDirectionType direction, + gpointer user_data) +{ + MctUserControls *self = MCT_USER_CONTROLS (user_data); + GtkWidget *new_widget = NULL; + + /* There are currently two listboxes, so don’t over-complicate this function. */ + if (listbox == GTK_WIDGET (self->application_usage_permissions_listbox) && + direction == GTK_DIR_DOWN) + new_widget = GTK_WIDGET (self->software_installation_permissions_listbox); + else if (listbox == GTK_WIDGET (self->software_installation_permissions_listbox) && + direction == GTK_DIR_UP) + new_widget = GTK_WIDGET (self->application_usage_permissions_listbox); + + if (new_widget != NULL) + { + gtk_widget_child_focus (new_widget, direction); + return TRUE; + } + + return FALSE; +} + /* GObject overrides */ static void @@ -1031,6 +1056,7 @@ mct_user_controls_class_init (MctUserControlsClass *klass) gtk_widget_class_bind_template_callback (widget_class, on_restrict_applications_dialog_delete_event_cb); gtk_widget_class_bind_template_callback (widget_class, on_restrict_applications_dialog_response_cb); gtk_widget_class_bind_template_callback (widget_class, on_application_usage_permissions_listbox_activated_cb); + gtk_widget_class_bind_template_callback (widget_class, on_keynav_failed); } static void diff --git a/libmalcontent-ui/user-controls.ui b/libmalcontent-ui/user-controls.ui index 2155777..b699871 100644 --- a/libmalcontent-ui/user-controls.ui +++ b/libmalcontent-ui/user-controls.ui @@ -39,6 +39,7 @@ none True + True @@ -252,6 +253,7 @@ True none False +