diff options
author | Javier Sánchez Parra <javsanpar@riseup.net> | 2023-06-08 19:45:52 +0200 |
---|---|---|
committer | Fernando Fernandez Mancera <ffmancera@riseup.net> | 2023-06-14 09:58:11 +0200 |
commit | b3b8323499fea57169db916727ac86a5e05be7aa (patch) | |
tree | 6eef668b087661a94bdf6e9b502e5d84b9aa6055 | |
parent | dd561875dce20ce57a5ced45e6f62f3f45609fde (diff) |
tui: Enable/disable Wi-Fi and WWAN radios
This commit adds functionality to nmtui to enable or disable the Wi-Fi
and WWAN radios. Additionally, it provides a display of the hardware
status.
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1655
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | src/nmtui/meson.build | 1 | ||||
-rw-r--r-- | src/nmtui/nmtui-radio.c | 130 | ||||
-rw-r--r-- | src/nmtui/nmtui-radio.h | 11 | ||||
-rw-r--r-- | src/nmtui/nmtui.c | 4 |
5 files changed, 147 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index fd92054d01..33ce9482fc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5200,6 +5200,8 @@ src_nmtui_nmtui_SOURCES = \ src/nmtui/nmtui-edit.h \ src/nmtui/nmtui-hostname.c \ src/nmtui/nmtui-hostname.h \ + src/nmtui/nmtui-radio.c \ + src/nmtui/nmtui-radio.h \ \ src/nmtui/nm-editor-bindings.c \ src/nmtui/nm-editor-bindings.h \ diff --git a/src/nmtui/meson.build b/src/nmtui/meson.build index 48f2fbf47e..97ea9f32ec 100644 --- a/src/nmtui/meson.build +++ b/src/nmtui/meson.build @@ -47,6 +47,7 @@ executable( 'nmtui-connect.c', 'nmtui-edit.c', 'nmtui-hostname.c', + 'nmtui-radio.c', 'nmt-utils.c', 'nmt-widget-list.c', ), diff --git a/src/nmtui/nmtui-radio.c b/src/nmtui/nmtui-radio.c new file mode 100644 index 0000000000..c86360371e --- /dev/null +++ b/src/nmtui/nmtui-radio.c @@ -0,0 +1,130 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2023 Javier Sánchez Parra, javsanpar@riseup.net + */ + +/** + * SECTION:nmtui-radio + * @short_description: radio-setting functionality + * + */ + +#include "libnm-client-aux-extern/nm-default-client.h" + +#include "libnmt-newt/nmt-newt-toggle-button.h" +#include "libnmt-newt/nmt-newt-types.h" +#include "libnmt-newt/nmt-newt.h" + +#include "nmtui.h" +#include "nmtui-radio.h" +#include "nmt-utils.h" + +static void +nmtui_radio_toggle_wifi(GObject *object, gpointer radio_type) +{ + NmtNewtToggleButton *button = NMT_NEWT_TOGGLE_BUTTON(object); + gboolean enable_flag; + + enable_flag = nmt_newt_toggle_button_get_active(button); + nm_client_wireless_set_enabled(nm_client, enable_flag); +} + +static void +nmtui_radio_toggle_wwan(GObject *object, gpointer radio_type) +{ + NmtNewtToggleButton *button = NMT_NEWT_TOGGLE_BUTTON(object); + gboolean enable_flag; + + enable_flag = nmt_newt_toggle_button_get_active(button); + nm_client_wwan_set_enabled(nm_client, enable_flag); +} + +static void +nmtui_radio_run_dialog(void) +{ + gs_unref_object NmtNewtForm *form = NULL; + NmtNewtToggleButton *toggle_wifi, *toggle_wwan; + NmtNewtButtonBox *bbox; + NmtNewtWidget *widget; + NmtNewtGrid *grid; + gboolean enable_flag; + + form = g_object_new(NMT_TYPE_NEWT_FORM, "title", _("Set the radio switches status"), NULL); + + widget = nmt_newt_grid_new(); + nmt_newt_form_set_content(form, widget); + grid = NMT_NEWT_GRID(widget); + + widget = nmt_newt_label_new(_("Wi-Fi")); + nmt_newt_grid_add(grid, widget, 0, 0); + + widget = nmt_newt_label_new(_("Hardware:")); + nmt_newt_grid_add(grid, widget, 0, 1); + + if (!(nm_client_get_radio_flags(nm_client) & NM_RADIO_FLAG_WLAN_AVAILABLE)) { + widget = nmt_newt_label_new(_("Missing")); + } else { + enable_flag = nm_client_wireless_hardware_get_enabled(nm_client); + widget = nmt_newt_label_new(enable_flag ? _("Enabled") : _("Disabled")); + } + nmt_newt_grid_add(grid, widget, 1, 1); + nmt_newt_widget_set_padding(widget, 1, 0, 0, 0); + + widget = nmt_newt_label_new(_("Software:")); + nmt_newt_grid_add(grid, widget, 2, 1); + nmt_newt_widget_set_padding(widget, 3, 0, 0, 0); + + widget = nmt_newt_toggle_button_new(_("Enabled"), _("Disabled")); + nmt_newt_grid_add(grid, widget, 3, 1); + nmt_newt_widget_set_padding(widget, 1, 0, 0, 0); + toggle_wifi = NMT_NEWT_TOGGLE_BUTTON(widget); + enable_flag = nm_client_wireless_get_enabled(nm_client); + nmt_newt_toggle_button_set_active(toggle_wifi, enable_flag); + g_signal_connect(widget, "activated", G_CALLBACK(nmtui_radio_toggle_wifi), NULL); + + widget = nmt_newt_label_new(_("WWAN")); + nmt_newt_grid_add(grid, widget, 0, 2); + nmt_newt_widget_set_padding(widget, 0, 1, 0, 0); + + widget = nmt_newt_label_new(_("Hardware:")); + nmt_newt_grid_add(grid, widget, 0, 3); + + if (!(nm_client_get_radio_flags(nm_client) & NM_RADIO_FLAG_WWAN_AVAILABLE)) { + widget = nmt_newt_label_new(_("Missing")); + } else { + enable_flag = nm_client_wwan_hardware_get_enabled(nm_client); + widget = nmt_newt_label_new(enable_flag ? _("Enabled") : _("Disabled")); + } + nmt_newt_grid_add(grid, widget, 1, 3); + nmt_newt_widget_set_padding(widget, 1, 0, 0, 0); + + widget = nmt_newt_label_new(_("Software:")); + nmt_newt_grid_add(grid, widget, 2, 3); + nmt_newt_widget_set_padding(widget, 3, 0, 0, 0); + + widget = nmt_newt_toggle_button_new(_("Enabled"), _("Disabled")); + nmt_newt_grid_add(grid, widget, 3, 3); + nmt_newt_widget_set_padding(widget, 1, 0, 0, 0); + toggle_wwan = NMT_NEWT_TOGGLE_BUTTON(widget); + enable_flag = nm_client_wwan_get_enabled(nm_client); + nmt_newt_toggle_button_set_active(toggle_wwan, enable_flag); + g_signal_connect(widget, "activated", G_CALLBACK(nmtui_radio_toggle_wwan), NULL); + + widget = nmt_newt_button_box_new(NMT_NEWT_BUTTON_BOX_HORIZONTAL); + nmt_newt_grid_add(grid, widget, 3, 4); + nmt_newt_widget_set_padding(widget, 0, 1, 0, 0); + bbox = NMT_NEWT_BUTTON_BOX(widget); + + widget = nmt_newt_button_box_add_end(bbox, _("Back")); + nmt_newt_widget_set_exit_on_activate(widget, TRUE); + + nmt_newt_form_run_sync(form); +} + +NmtNewtForm * +nmtui_radio(gboolean is_top, int argc, char **argv) +{ + nmtui_radio_run_dialog(); + + return NULL; +} diff --git a/src/nmtui/nmtui-radio.h b/src/nmtui/nmtui-radio.h new file mode 100644 index 0000000000..53d60b9a59 --- /dev/null +++ b/src/nmtui/nmtui-radio.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2023 Javier Sánchez Parra, javsanpar@riseup.net + */ + +#ifndef NMTUI_RADIO_H +#define NMTUI_RADIO_H + +NmtNewtForm *nmtui_radio(gboolean is_top, int argc, char **argv); + +#endif /* NMTUI_RADIO_H */ diff --git a/src/nmtui/nmtui.c b/src/nmtui/nmtui.c index 37c26e9d43..9927e40aa4 100644 --- a/src/nmtui/nmtui.c +++ b/src/nmtui/nmtui.c @@ -26,6 +26,7 @@ #include "nmtui-edit.h" #include "nmtui-connect.h" #include "nmtui-hostname.h" +#include "nmtui-radio.h" NMClient *nm_client; static GMainLoop *loop; @@ -39,7 +40,8 @@ static const struct { } subprograms[] = { {"edit", "nmtui-edit", N_("connection"), N_("Edit a connection"), nmtui_edit}, {"connect", "nmtui-connect", N_("connection"), N_("Activate a connection"), nmtui_connect}, - {"hostname", "nmtui-hostname", N_("new hostname"), N_("Set system hostname"), nmtui_hostname}}; + {"hostname", "nmtui-hostname", N_("new hostname"), N_("Set system hostname"), nmtui_hostname}, + {"radio", "nmtui-radio", N_("radio"), N_("Radio"), nmtui_radio}}; static const int num_subprograms = G_N_ELEMENTS(subprograms); static NmtNewtForm *toplevel_form; |