diff --git a/panels/network/net-device-ethernet.c b/panels/network/net-device-ethernet.c index 0cd3b147a..186b05711 100644 --- a/panels/network/net-device-ethernet.c +++ b/panels/network/net-device-ethernet.c @@ -208,7 +208,6 @@ device_ethernet_refresh_ui (NetDeviceEthernet *device) NMDevice *nm_device; NMDeviceState state; GtkWidget *widget; - GString *status; gchar *speed = NULL; nm_device = net_device_get_nm_device (NET_DEVICE (device)); @@ -230,17 +229,9 @@ device_ethernet_refresh_ui (NetDeviceEthernet *device) gtk_switch_set_active (GTK_SWITCH (widget), device_state_to_off_switch (state)); device->updating_device = FALSE; - widget = GTK_WIDGET (gtk_builder_get_object (device->builder, "label_status")); - status = g_string_new (panel_device_state_to_localized_string (nm_device)); if (state != NM_DEVICE_STATE_UNAVAILABLE) speed = net_device_simple_get_speed (NET_DEVICE_SIMPLE (device)); - if (speed) { - if (status->len) - g_string_append (status, " - "); - g_string_append (status, speed); - } - gtk_label_set_label (GTK_LABEL (widget), status->str); - g_string_free (status, TRUE); + panel_set_device_status (device->builder, "label_status", nm_device, speed); populate_ui (device); } diff --git a/panels/network/net-device-mobile.c b/panels/network/net-device-mobile.c index 4b68783db..9afbdb5f6 100644 --- a/panels/network/net-device-mobile.c +++ b/panels/network/net-device-mobile.c @@ -247,10 +247,8 @@ static void nm_device_mobile_refresh_ui (NetDeviceMobile *device_mobile) { gboolean is_connected; - GString *status; GtkListStore *liststore; GtkWidget *widget; - guint speed = 0; NetDeviceMobilePrivate *priv = device_mobile->priv; NMClient *client; NMDeviceModemCapabilities caps; @@ -268,18 +266,8 @@ nm_device_mobile_refresh_ui (NetDeviceMobile *device_mobile) client = net_object_get_client (NET_OBJECT (device_mobile)); mobilebb_enabled_toggled (client, NULL, device_mobile); - /* set device state, with status and optionally speed */ - widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder, "label_status")); - status = g_string_new (panel_device_state_to_localized_string (nm_device)); - if (speed > 0) { - if (status->len) - g_string_append (status, " - "); - /* Translators: network device speed */ - g_string_append_printf (status, _("%d Mb/s"), speed); - } - gtk_label_set_label (GTK_LABEL (widget), status->str); - g_string_free (status, TRUE); - gtk_widget_set_tooltip_text (widget, panel_device_state_reason_to_localized_string (nm_device)); + /* set device state, with status */ + panel_set_device_status (device_mobile->priv->builder, "label_status", nm_device, NULL); /* sensitive for other connection types if the device is currently connected */ widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder, diff --git a/panels/network/net-device-simple.c b/panels/network/net-device-simple.c index f7a1dfce9..0b936edb8 100644 --- a/panels/network/net-device-simple.c +++ b/panels/network/net-device-simple.c @@ -93,13 +93,12 @@ update_off_switch_from_device_state (GtkSwitch *sw, static void nm_device_simple_refresh_ui (NetDeviceSimple *device_simple) { + NetDeviceSimplePrivate *priv = device_simple->priv; char *hwaddr; - GString *status; GtkWidget *widget; char *speed = NULL; NMDevice *nm_device; NMDeviceState state; - NetDeviceSimplePrivate *priv = device_simple->priv; nm_device = net_device_get_nm_device (NET_DEVICE (device_simple)); @@ -124,20 +123,9 @@ nm_device_simple_refresh_ui (NetDeviceSimple *device_simple) gtk_widget_set_visible (widget, state != NM_DEVICE_STATE_UNMANAGED); /* set device state, with status and optionally speed */ - widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "label_status")); - status = g_string_new (panel_device_state_to_localized_string (nm_device)); if (state != NM_DEVICE_STATE_UNAVAILABLE) speed = net_device_simple_get_speed (device_simple); - if (speed) { - if (status->len) - g_string_append (status, " - "); - g_string_append (status, speed); - g_free (speed); - } - gtk_label_set_label (GTK_LABEL (widget), status->str); - g_string_free (status, TRUE); - gtk_widget_set_tooltip_text (widget, - panel_device_state_reason_to_localized_string (nm_device)); + panel_set_device_status (priv->builder, "label_status", nm_device, speed); /* device MAC */ g_object_get (G_OBJECT (nm_device), diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c index aa8b73d59..13093ba0a 100644 --- a/panels/network/net-device-wifi.c +++ b/panels/network/net-device-wifi.c @@ -494,7 +494,6 @@ nm_device_wifi_refresh_ui (NetDeviceWifi *device_wifi) const gchar *str; gboolean is_hotspot; gchar *str_tmp = NULL; - GtkWidget *widget; gint strength = 0; guint speed = 0; NMAccessPoint *active_ap; @@ -595,9 +594,7 @@ nm_device_wifi_refresh_ui (NetDeviceWifi *device_wifi) else panel_set_device_widget_details (priv->builder, "last_used", NULL); - widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, "heading_status")); - gtk_label_set_label (GTK_LABEL (widget), - panel_device_state_to_localized_string (nm_device)); + panel_set_device_status (priv->builder, "heading_status", nm_device, NULL); /* update list of APs */ populate_ap_list (device_wifi); diff --git a/panels/network/net-virtual-device.c b/panels/network/net-virtual-device.c index f8567f993..b1c237818 100644 --- a/panels/network/net-virtual-device.c +++ b/panels/network/net-virtual-device.c @@ -153,7 +153,6 @@ net_virtual_device_refresh (NetObject *object) NetVirtualDevice *virtual_device = NET_VIRTUAL_DEVICE (object); NetVirtualDevicePrivate *priv = virtual_device->priv; char *hwaddr; - const char *status, *tooltip; GtkWidget *widget; NMDevice *nm_device; NMDeviceState state; @@ -174,16 +173,12 @@ net_virtual_device_refresh (NetObject *object) update_off_switch_from_device_state (GTK_SWITCH (widget), state, virtual_device); /* set device state, with status and optionally speed */ - widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "label_status")); if (nm_device) { - status = panel_device_state_to_localized_string (nm_device); - tooltip = panel_device_state_reason_to_localized_string (nm_device); + panel_set_device_status (priv->builder, "label_status", nm_device, NULL); } else { - status = ""; - tooltip = NULL; + widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "label_status")); + gtk_label_set_label (GTK_LABEL (widget), ""); } - gtk_label_set_label (GTK_LABEL (widget), status); - gtk_widget_set_tooltip_text (widget, tooltip); /* device MAC */ if (nm_device) { diff --git a/panels/network/panel-common.c b/panels/network/panel-common.c index b71eee21d..452f02da3 100644 --- a/panels/network/panel-common.c +++ b/panels/network/panel-common.c @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -180,19 +181,11 @@ panel_ap_mode_to_localized_string (NM80211Mode mode) return value; } -/** - * panel_device_state_to_localized_string: - **/ -const gchar * -panel_device_state_to_localized_string (NMDevice *device) +static const gchar * +device_state_to_localized_string (NMDeviceState state) { - NMDeviceType type; - NMDeviceState state; - - type = nm_device_get_device_type (device); - state = nm_device_get_state (device); - const gchar *value = NULL; + switch (state) { case NM_DEVICE_STATE_UNKNOWN: /* TRANSLATORS: device status */ @@ -203,20 +196,11 @@ panel_device_state_to_localized_string (NMDevice *device) value = _("Unmanaged"); break; case NM_DEVICE_STATE_UNAVAILABLE: - if (nm_device_get_firmware_missing (device)) { - /* TRANSLATORS: device status */ - value = _("Firmware missing"); - } else if (type == NM_DEVICE_TYPE_ETHERNET && - !nm_device_ethernet_get_carrier (NM_DEVICE_ETHERNET (device))) { - /* TRANSLATORS: device status */ - value = _("Cable unplugged"); - } else { - /* TRANSLATORS: device status */ - value = _("Unavailable"); - } + /* TRANSLATORS: device status */ + value = _("Unavailable"); break; case NM_DEVICE_STATE_DISCONNECTED: - value = ""; + value = NULL; break; case NM_DEVICE_STATE_PREPARE: case NM_DEVICE_STATE_CONFIG: @@ -291,16 +275,17 @@ panel_vpn_state_to_localized_string (NMVPNConnectionState type) return value; } -/** - * panel_device_state_reason_to_localized_string: - **/ -const gchar * -panel_device_state_reason_to_localized_string (NMDevice *device) +static const gchar * +device_state_reason_to_localized_string (NMDevice *device) { const gchar *value = NULL; NMDeviceStateReason state_reason; - /* we only want the StateReason's we care about */ + /* This only covers NMDeviceStateReasons that explain why a connection + * failed / can't be attempted, and aren't redundant with the state + * (eg, NM_DEVICE_STATE_REASON_CARRIER). + */ + nm_device_get_state_reason (device, &state_reason); switch (state_reason) { case NM_DEVICE_STATE_REASON_CONFIG_FAILED: @@ -435,10 +420,6 @@ panel_device_state_reason_to_localized_string (NMDevice *device) /* TRANSLATORS: device status reason */ value = _("Connection disappeared"); break; - case NM_DEVICE_STATE_REASON_CARRIER: - /* TRANSLATORS: device status reason */ - value = _("Carrier/link changed"); - break; case NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED: /* TRANSLATORS: device status reason */ value = _("Existing connection was assumed"); @@ -483,6 +464,69 @@ panel_device_state_reason_to_localized_string (NMDevice *device) return value; } +static gchar * +device_status_to_localized_string (NMDevice *nm_device, + const gchar *speed) +{ + NMDeviceState state; + GString *string; + const gchar *state_str = NULL, *reason_str = NULL; + + string = g_string_new (NULL); + + state = nm_device_get_state (nm_device); + if (state == NM_DEVICE_STATE_UNAVAILABLE) { + if (nm_device_get_firmware_missing (nm_device)) { + /* TRANSLATORS: device status */ + state_str = _("Firmware missing"); + } else if (NM_IS_DEVICE_ETHERNET (nm_device) && + !nm_device_ethernet_get_carrier (NM_DEVICE_ETHERNET (nm_device))) { + /* TRANSLATORS: device status */ + state_str = _("Cable unplugged"); + } else if (NM_IS_DEVICE_INFINIBAND (nm_device) && + !nm_device_infiniband_get_carrier (NM_DEVICE_INFINIBAND (nm_device))) { + state_str = _("Cable unplugged"); + } + } + if (!state_str) + state_str = device_state_to_localized_string (state); + if (state_str) + g_string_append (string, state_str); + + if (state > NM_DEVICE_STATE_UNAVAILABLE && speed) { + if (string->len) + g_string_append (string, " - "); + g_string_append (string, speed); + } else if (state == NM_DEVICE_STATE_UNAVAILABLE || + state == NM_DEVICE_STATE_DISCONNECTED || + state == NM_DEVICE_STATE_DEACTIVATING || + state == NM_DEVICE_STATE_FAILED) { + reason_str = device_state_reason_to_localized_string (nm_device); + if (*reason_str) { + if (string->len) + g_string_append (string, " - "); + g_string_append (string, reason_str); + } + } + + return g_string_free (string, FALSE); +} + +void +panel_set_device_status (GtkBuilder *builder, + const gchar *label_name, + NMDevice *nm_device, + const gchar *speed) +{ + GtkLabel *label; + gchar *status; + + label = GTK_LABEL (gtk_builder_get_object (builder, label_name)); + status = device_status_to_localized_string (nm_device, speed); + gtk_label_set_label (label, status); + g_free (status); +} + gboolean panel_set_device_widget_details (GtkBuilder *builder, const gchar *widget_suffix, diff --git a/panels/network/panel-common.h b/panels/network/panel-common.h index 89e75e8ea..279abe241 100644 --- a/panels/network/panel-common.h +++ b/panels/network/panel-common.h @@ -35,9 +35,11 @@ const gchar *panel_device_to_icon_name (NMDevice *device 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 (NMDevice *device); const gchar *panel_vpn_state_to_localized_string (NMVPNConnectionState type); -const gchar *panel_device_state_reason_to_localized_string (NMDevice *device); +void panel_set_device_status (GtkBuilder *builder, + const gchar *label_name, + NMDevice *nm_device, + const gchar *speed); gboolean panel_set_device_widget_details (GtkBuilder *builder, const gchar *widget_suffix, const gchar *value);