From 8d8eaca0d0e52e46658bddf51a25e0f67a652df8 Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Wed, 14 Aug 2024 12:47:05 +0200 Subject: [PATCH] nmtui: correctly check that connection list is non-empty Previously, the "edit" or "delete" buttons were clickable even if there were no available connections, which was not expected and caused an assertion to fail when clicked. This is because the connections list could contain connections that were later filtered out and not displayed in the final list, but the check did not take this into account. Make it so that the buttons are clickable only if we *actually* have any available connections to edit or delete. Fixes: 3bda3fb60c10 ('nmtui: initial import of nmtui') https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1991 (cherry picked from commit c9fefcd095c29b4d9b08c75badf4bce8fbfb9736) (cherry picked from commit f6e4d1b2e06ede827216ab442c9c6126e682eca6) (cherry picked from commit de444a45627f1a019f107e284b1c911e4772bd20) --- src/nmtui/nmt-edit-connection-list.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/nmtui/nmt-edit-connection-list.c b/src/nmtui/nmt-edit-connection-list.c index f8d8303b65..1ea4400709 100644 --- a/src/nmtui/nmt-edit-connection-list.c +++ b/src/nmtui/nmt-edit-connection-list.c @@ -154,7 +154,7 @@ nmt_edit_connection_list_rebuild(NmtEditConnectionList *list) NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE(list); const GPtrArray *connections; GSList *iter; - gboolean did_header = FALSE, did_vpn = FALSE; + gboolean did_header = FALSE, did_vpn = FALSE, did_any = FALSE; NMEditorConnectionTypeData **types; NMConnection *conn, *selected_conn; int i, row, selected_row; @@ -181,9 +181,6 @@ nmt_edit_connection_list_rebuild(NmtEditConnectionList *list) g_object_notify(G_OBJECT(list), "connections"); g_object_notify(G_OBJECT(list), "num-connections"); - nmt_newt_component_set_sensitive(NMT_NEWT_COMPONENT(priv->edit), priv->connections != NULL); - nmt_newt_component_set_sensitive(NMT_NEWT_COMPONENT(priv->delete), priv->connections != NULL); - nmt_newt_listbox_clear(priv->listbox); if (!priv->grouped) { @@ -198,7 +195,9 @@ nmt_edit_connection_list_rebuild(NmtEditConnectionList *list) selected_row = row - 1; nmt_newt_listbox_set_active(priv->listbox, selected_row); - return; + did_any = !!priv->connections; + + goto done; } types = nm_editor_utils_get_connection_type_list(); @@ -230,6 +229,10 @@ nmt_edit_connection_list_rebuild(NmtEditConnectionList *list) did_header = TRUE; } + if (!did_any) { + did_any = TRUE; + } + indented = g_strdup_printf(" %s", nm_connection_get_id(conn)); nmt_newt_listbox_append(priv->listbox, indented, conn); g_free(indented); @@ -243,6 +246,10 @@ nmt_edit_connection_list_rebuild(NmtEditConnectionList *list) if (selected_row >= row) selected_row = row - 1; nmt_newt_listbox_set_active(priv->listbox, selected_row); + +done: + nmt_newt_component_set_sensitive(NMT_NEWT_COMPONENT(priv->edit), did_any); + nmt_newt_component_set_sensitive(NMT_NEWT_COMPONENT(priv->delete), did_any); } static void