[gnome-control-center/gnome-3-8] network: Make it possible to delete virtual devices



commit 53da41668e9df5aa4eee0d890f456ccb2d11a98b
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Apr 12 20:27:26 2013 -0400

    network: Make it possible to delete virtual devices
    
    Bridges, bonds and vlans should be deletable, like they are
    in nm-connection-editor. The delete button was already sensitive
    for these devices, but it didn't do anything. This commit hooks
    up the necessary functionality.
    https://bugzilla.gnome.org/show_bug.cgi?id=697919

 panels/network/net-virtual-device.c | 55 +++++++++++++++++++++++++++++++++++--
 1 file changed, 52 insertions(+), 3 deletions(-)
---
diff --git a/panels/network/net-virtual-device.c b/panels/network/net-virtual-device.c
index b1c2378..b41629b 100644
--- a/panels/network/net-virtual-device.c
+++ b/panels/network/net-virtual-device.c
@@ -60,6 +60,39 @@ static guint signals[SIGNAL_LAST] = { 0 };
 G_DEFINE_TYPE (NetVirtualDevice, net_virtual_device, NET_TYPE_DEVICE)
 
 static void
+connection_changed_cb (NMConnection *connection,
+                       NetObject    *object)
+{
+        net_object_emit_changed (object);
+}
+
+static void
+connection_removed_cb (NMConnection *connection,
+                       NetObject    *object)
+{
+        net_object_emit_removed (object);
+}
+
+static void
+net_virtual_device_set_connection (NetVirtualDevice *virtual_device,
+                                   NMConnection     *connection)
+{
+        NetVirtualDevicePrivate *priv = virtual_device->priv;
+
+        priv->connection = g_object_ref (connection);
+        priv->iface = nm_connection_get_virtual_iface_name (priv->connection);
+
+        g_signal_connect (priv->connection,
+                          NM_REMOTE_CONNECTION_REMOVED,
+                          G_CALLBACK (connection_removed_cb),
+                          virtual_device);
+        g_signal_connect (priv->connection,
+                          NM_REMOTE_CONNECTION_UPDATED,
+                          G_CALLBACK (connection_changed_cb),
+                          virtual_device);
+}
+
+static void
 net_virtual_device_get_property (GObject *object,
                                  guint prop_id,
                                  GValue *value,
@@ -86,12 +119,12 @@ net_virtual_device_set_property (GObject *object,
                                  GParamSpec *pspec)
 {
         NetVirtualDevice *virtual_device = NET_VIRTUAL_DEVICE (object);
-        NetVirtualDevicePrivate *priv = virtual_device->priv;
+        NMConnection *connection;
 
         switch (prop_id) {
         case PROP_CONNECTION:
-                priv->connection = g_value_dup_object (value);
-                priv->iface = nm_connection_get_virtual_iface_name (priv->connection);
+                connection = NM_CONNECTION (g_value_get_object (value));
+                net_virtual_device_set_connection (virtual_device, connection);
                 break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (virtual_device, prop_id, pspec);
@@ -198,6 +231,21 @@ net_virtual_device_refresh (NetObject *object)
 }
 
 static void
+net_virtual_device_delete (NetObject *object)
+{
+        NetVirtualDevice *virtual_device = NET_VIRTUAL_DEVICE (object);
+        NetVirtualDevicePrivate *priv = virtual_device->priv;
+        const char *path;
+        NMRemoteSettings *settings;
+        NMRemoteConnection *connection;
+
+        settings = net_object_get_remote_settings (object);
+        path = nm_connection_get_path (priv->connection);
+        connection = nm_remote_settings_get_connection_by_path (settings, path);
+        nm_remote_connection_delete (connection, NULL, NULL);
+}
+
+static void
 device_added_cb (NMClient *client, NMDevice *nm_device, gpointer user_data)
 {
         NetVirtualDevice *virtual_device = user_data;
@@ -333,6 +381,7 @@ net_virtual_device_class_init (NetVirtualDeviceClass *klass)
 
         net_object_class->refresh = net_virtual_device_refresh;
         net_object_class->add_to_notebook = net_virtual_device_add_to_notebook;
+        net_object_class->delete = net_virtual_device_delete;
 
         device_class->get_find_connection = net_virtual_device_get_find_connection;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]