summaryrefslogtreecommitdiff
path: root/clients/cli/devices.c
diff options
context:
space:
mode:
Diffstat (limited to 'clients/cli/devices.c')
-rw-r--r--clients/cli/devices.c26
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 */