network: show the VPN connection state in the panel header

This commit is contained in:
Richard Hughes 2011-03-11 12:56:14 +00:00
parent bb70c1bd1a
commit 7914025e1f
7 changed files with 125 additions and 7 deletions

View file

@ -1035,18 +1035,37 @@ nm_device_refresh_vpn_ui (CcNetworkPanel *panel, NetVpn *vpn)
{
GtkWidget *widget;
const gchar *sub_pane = "vpn";
const gchar *status;
CcNetworkPanelPrivate *priv = panel->priv;
/* Hide the header: TODO: confirm with designers */
/* show the header */
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder,
"hbox_device_header"));
gtk_widget_set_visible (widget, FALSE);
gtk_widget_set_visible (widget, TRUE);
/* use proxy note page */
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder,
"notebook_types"));
gtk_notebook_set_current_page (GTK_NOTEBOOK (widget), 3);
/* set VPN icon */
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder,
"image_device"));
gtk_image_set_from_icon_name (GTK_IMAGE (widget),
"network-workgroup",
GTK_ICON_SIZE_DIALOG);
/* use title */
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder,
"label_device"));
gtk_label_set_label (GTK_LABEL (widget), net_object_get_title (NET_OBJECT (vpn)));
/* use status */
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder,
"label_status"));
status = panel_vpn_state_to_localized_string (net_vpn_get_state (vpn));
gtk_label_set_label (GTK_LABEL (widget), status);
/* gateway */
panel_set_widget_data (panel,
sub_pane,
@ -1264,6 +1283,7 @@ panel_add_vpn_device (CcNetworkPanel *panel, NMConnection *connection)
title_markup = g_strdup_printf ("<span size=\"large\">%s</span>",
title);
net_object_set_title (NET_OBJECT (net_vpn), title);
gtk_list_store_append (liststore_devices, &iter);
gtk_list_store_set (liststore_devices,
&iter,

View file

@ -30,7 +30,7 @@
struct _NetObjectPrivate
{
guint dummy;
gchar *title;
};
enum {
@ -49,13 +49,28 @@ net_object_emit_changed (NetObject *object)
g_signal_emit (object, signals[SIGNAL_CHANGED], 0);
}
const gchar *
net_object_get_title (NetObject *object)
{
NetObjectPrivate *priv = object->priv;
return priv->title;
}
void
net_object_set_title (NetObject *object, const gchar *title)
{
NetObjectPrivate *priv = object->priv;
priv->title = g_strdup (title);
}
static void
net_object_finalize (GObject *object)
{
#if 0
NetObject *object = NET_OBJECT (object);
NetObjectPrivate *priv = object->priv;
#endif
NetObject *nm_object = NET_OBJECT (object);
NetObjectPrivate *priv = nm_object->priv;
g_free (priv->title);
G_OBJECT_CLASS (net_object_parent_class)->finalize (object);
}

View file

@ -51,6 +51,9 @@ struct _NetObjectClass
GType net_object_get_type (void);
NetObject *net_object_new (void);
const gchar *net_object_get_title (NetObject *object);
void net_object_set_title (NetObject *object,
const gchar *title);
void net_object_emit_changed (NetObject *object);
G_END_DECLS

View file

@ -32,10 +32,20 @@
struct _NetVpnPrivate
{
NMSettingVPN *setting;
NMConnection *connection;
};
G_DEFINE_TYPE (NetVpn, net_vpn, NET_TYPE_OBJECT)
static void
connection_state_changed_cb (NMVPNConnection *connection,
NMVPNConnectionState state,
NMVPNConnectionStateReason reason,
NetVpn *vpn)
{
net_object_emit_changed (NET_OBJECT (vpn));
}
void
net_vpn_set_connection (NetVpn *vpn, NMConnection *connection)
{
@ -49,9 +59,25 @@ net_vpn_set_connection (NetVpn *vpn, NMConnection *connection)
* key=IPSec ID, value=rh-vpn
* key=Xauth username, value=rhughes
*/
priv->connection = g_object_ref (connection);
if (NM_IS_VPN_CONNECTION (priv->connection)) {
g_signal_connect (priv->connection,
NM_VPN_CONNECTION_VPN_STATE,
G_CALLBACK (connection_state_changed_cb),
vpn);
}
priv->setting = NM_SETTING_VPN (nm_connection_get_setting_by_name (connection, "vpn"));
}
NMVPNConnectionState
net_vpn_get_state (NetVpn *vpn)
{
NetVpnPrivate *priv = vpn->priv;
if (!NM_IS_VPN_CONNECTION (priv->connection))
return NM_VPN_CONNECTION_STATE_DISCONNECTED;
return nm_vpn_connection_get_vpn_state (NM_VPN_CONNECTION (priv->connection));
}
const gchar *
net_vpn_get_gateway (NetVpn *vpn)
{
@ -86,6 +112,7 @@ net_vpn_finalize (GObject *object)
NetVpn *vpn = NET_VPN (object);
NetVpnPrivate *priv = vpn->priv;
g_object_unref (priv->connection);
g_object_unref (priv->setting);
G_OBJECT_CLASS (net_vpn_parent_class)->finalize (object);

View file

@ -24,8 +24,10 @@
#include <glib-object.h>
#include "NetworkManagerVPN.h"
#include "net-object.h"
#include "nm-connection.h"
#include "nm-vpn-connection.h"
G_BEGIN_DECLS
@ -59,6 +61,7 @@ const gchar *net_vpn_get_gateway (NetVpn *vpn);
const gchar *net_vpn_get_id (NetVpn *vpn);
const gchar *net_vpn_get_username (NetVpn *vpn);
const gchar *net_vpn_get_password (NetVpn *vpn);
NMVPNConnectionState net_vpn_get_state (NetVpn *vpn);
G_END_DECLS

View file

@ -227,3 +227,51 @@ panel_device_state_to_localized_string (NMDeviceState type)
}
return value;
}
/**
* panel_vpn_state_to_localized_string:
**/
const gchar *
panel_vpn_state_to_localized_string (NMVPNConnectionState type)
{
const gchar *value = NULL;
switch (type) {
case NM_DEVICE_STATE_UNKNOWN:
/* TRANSLATORS: VPN status */
value = _("Status unknown");
break;
case NM_VPN_CONNECTION_STATE_PREPARE:
/* TRANSLATORS: VPN status */
value = _("Preparing");
break;
case NM_VPN_CONNECTION_STATE_NEED_AUTH:
/* TRANSLATORS: VPN status */
value = _("Authenticating");
break;
case NM_VPN_CONNECTION_STATE_CONNECT:
/* TRANSLATORS: VPN status */
value = _("Connecting");
break;
case NM_VPN_CONNECTION_STATE_IP_CONFIG_GET:
/* TRANSLATORS: VPN status */
value = _("Getting network address");
break;
case NM_VPN_CONNECTION_STATE_ACTIVATED:
/* TRANSLATORS: VPN status */
value = _("Active");
break;
case NM_VPN_CONNECTION_STATE_FAILED:
/* TRANSLATORS: VPN status */
value = _("Failed");
break;
case NM_VPN_CONNECTION_STATE_DISCONNECTED:
/* TRANSLATORS: VPN status */
value = _("Disconnected");
break;
default:
/* TRANSLATORS: VPN status */
value = _("Status unknown (missing)");
break;
}
return value;
}

View file

@ -24,6 +24,7 @@
#include <glib-object.h>
#include <NetworkManager.h>
#include <NetworkManagerVPN.h>
#include <nm-device.h>
G_BEGIN_DECLS
@ -33,6 +34,7 @@ const gchar *panel_device_to_localized_string (NMDevice *device);
const gchar *panel_device_to_sortable_string (NMDevice *device);
const gchar *panel_ap_mode_to_localized_string (NM80211Mode mode);
const gchar *panel_device_state_to_localized_string (NMDeviceState type);
const gchar *panel_vpn_state_to_localized_string (NMVPNConnectionState type);
G_END_DECLS