[network-manager-netbook] (Re)implement support for static IP
- From: Tambet Ingo <tambeti src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [network-manager-netbook] (Re)implement support for static IP
- Date: Thu, 28 Jan 2010 20:36:39 +0000 (UTC)
commit d60fe3d507daede92b52135ab9edb97f0d690ad0
Author: Tambet Ingo <tambet gmail com>
Date: Thu Jan 28 11:36:23 2010 -0400
(Re)implement support for static IP
It got lost with the new design and now it's back.
src/nmn-item-renderer.c | 59 +++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 55 insertions(+), 4 deletions(-)
---
diff --git a/src/nmn-item-renderer.c b/src/nmn-item-renderer.c
index 8f2a692..af4d5b5 100644
--- a/src/nmn-item-renderer.c
+++ b/src/nmn-item-renderer.c
@@ -61,6 +61,9 @@ typedef struct {
gboolean disposed;
} NmnItemRendererPrivate;
+static NmnConnectionDetails *get_details (NmnItemRenderer *self);
+
+
GtkWidget *
nmn_item_renderer_new (void)
{
@@ -193,15 +196,63 @@ item_changed (NMListItem *item,
}
static void
+update_connection_cb (NMSettingsConnectionInterface *connection,
+ GError *error,
+ gpointer user_data)
+{
+ NmnItemRenderer *self = NMN_ITEM_RENDERER (user_data);
+ NmnItemRendererPrivate *priv = GET_PRIVATE (self);
+
+ if (error)
+ g_warning ("Couldn't update connection: %s", error->message);
+ else
+ nm_list_item_connect (nmn_item_renderer_get_item (self));
+}
+
+static gboolean
+details_need_updating (NmnItemRenderer *self)
+{
+ NmnItemRendererPrivate *priv = GET_PRIVATE (self);
+ NmnConnectionDetails *details;
+ NMSettingsConnectionInterface *connection;
+ NMSetting *current_config;
+ NMSetting *new_config;
+
+ connection = nm_connection_item_get_connection (NM_CONNECTION_ITEM (priv->item));
+ if (!connection)
+ /* FIXME: Now this is wrong - need to use the IP configuration still */
+ return FALSE;
+
+ current_config = nm_connection_get_setting (NM_CONNECTION (connection), NM_TYPE_SETTING_IP4_CONFIG);
+
+ details = get_details (self);
+ new_config = NM_SETTING (nmn_connection_details_get_data (NMN_CONNECTION_DETAILS (details)));
+ g_assert (new_config);
+
+ if (current_config == NULL || nm_setting_compare (current_config, new_config, 0) == FALSE) {
+ nm_connection_add_setting (NM_CONNECTION (connection), new_config);
+ nm_connection_dump (NM_CONNECTION (connection));
+ nm_settings_connection_interface_update (connection,
+ update_connection_cb,
+ self);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
connect_button_clicked (GtkButton *button, gpointer user_data)
{
NmnItemRenderer *self = NMN_ITEM_RENDERER (user_data);
NMListItem *item;
item = nmn_item_renderer_get_item (self);
- if (nm_list_item_get_status (item) == NM_LIST_ITEM_STATUS_DISCONNECTED)
- nm_list_item_connect (item);
- else
+ if (nm_list_item_get_status (item) == NM_LIST_ITEM_STATUS_DISCONNECTED) {
+ if (!details_need_updating (self))
+ nm_list_item_connect (item);
+ } else
nm_list_item_disconnect (item);
}
@@ -215,7 +266,7 @@ details_changed (NmnConnectionDetails *details,
gtk_widget_set_sensitive (GTK_WIDGET (priv->connect_button), complete);
}
-NmnConnectionDetails *
+static NmnConnectionDetails *
get_details (NmnItemRenderer *self)
{
NmnItemRendererPrivate *priv = GET_PRIVATE (self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]