diff options
Diffstat (limited to 'clients/cli/devices.c')
-rw-r--r-- | clients/cli/devices.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/clients/cli/devices.c b/clients/cli/devices.c index 3d9598fb41..3703743957 100644 --- a/clients/cli/devices.c +++ b/clients/cli/devices.c @@ -28,6 +28,7 @@ #include <glib.h> #include <glib/gi18n.h> +#include "polkit-agent.h" #include "utils.h" #include "common.h" #include "devices.h" @@ -766,10 +767,8 @@ show_device_info (NMDevice *device, NmCli *nmc) NmcOutputField *tmpl, *arr; size_t tmpl_len; gboolean was_output = FALSE; - NMIP4Config *cfg4; - NMIP6Config *cfg6; - NMDhcp4Config *dhcp4; - NMDhcp6Config *dhcp6; + NMIPConfig *cfg4, *cfg6; + NMDhcpConfig *dhcp4, *dhcp6; const char *base_hdr = _("Device details"); GPtrArray *fields_in_section = NULL; @@ -1599,18 +1598,29 @@ error: static void disconnect_state_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data) { - NmCli *nmc = (NmCli *) user_data; NMDeviceState state; state = nm_device_get_state (device); if (state == NM_DEVICE_STATE_DISCONNECTED) { - g_string_printf (nmc->return_text, _("Success: Device '%s' successfully disconnected."), nm_device_get_iface (device)); + g_signal_handlers_disconnect_by_data (device, user_data); + g_print (_("Device '%s' successfully disconnected.\n"), + nm_device_get_iface (device)); quit (); } } static void +device_removed_cb (NMClient *client, NMDevice *device, gpointer user_data) +{ + /* Success: device has been removed. It happens when disconnecting a software device. */ + g_signal_handlers_disconnect_by_data (client, user_data); + g_print (_("Device '%s' successfully disconnected.\n"), + nm_device_get_iface (device)); + quit (); +} + +static void disconnect_device_cb (GObject *object, GAsyncResult *result, gpointer user_data) { NMDevice *device = NM_DEVICE (object); @@ -1639,6 +1649,7 @@ disconnect_device_cb (GObject *object, GAsyncResult *result, gpointer user_data) quit (); } else { g_signal_connect (device, "notify::state", G_CALLBACK (disconnect_state_cb), nmc); + g_signal_connect (nmc->client, NM_CLIENT_DEVICE_REMOVED, G_CALLBACK (device_removed_cb), nmc); /* Start timer not to loop forever if "notify::state" signal is not issued */ g_timeout_add_seconds (nmc->timeout, timeout_cb, nmc); } @@ -2776,6 +2787,9 @@ do_devices (NmCli *nmc, int argc, char **argv) { GError *error = NULL; + /* Register polkit agent */ + nmc_start_polkit_agent_start_try (nmc); + rl_attempted_completion_function = (rl_completion_func_t *) nmcli_device_tab_completion; /* Get NMClient object early */ |