[gnome-control-center] network: disambiguate devices of the same type
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] network: disambiguate devices of the same type
- Date: Thu, 11 Oct 2012 07:29:14 +0000 (UTC)
commit 63756458b2de0d730763cc2acbd510659e4d00a5
Author: Dan Winship <danw gnome org>
Date: Thu Sep 27 16:15:19 2012 -0400
network: disambiguate devices of the same type
If there are multiple devices that would end up with the same name in
the device list, disambiguate their names via new libnm-gtk API.
https://bugzilla.gnome.org/show_bug.cgi?id=677143
panels/network/cc-network-panel.c | 90 +++++++++++++++++++++++++++++++-----
panels/network/net-device-mobile.c | 6 +-
panels/network/net-device-simple.c | 6 +-
panels/network/net-device-wifi.c | 2 +-
panels/network/net-object.c | 4 +-
panels/network/panel-common.c | 43 -----------------
panels/network/panel-common.h | 1 -
7 files changed, 88 insertions(+), 64 deletions(-)
---
diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c
index 3e9225b..7093744 100644
--- a/panels/network/cc-network-panel.c
+++ b/panels/network/cc-network-panel.c
@@ -29,6 +29,7 @@
#include "nm-client.h"
#include "nm-device.h"
#include "nm-device-modem.h"
+#include <libnm-gtk/nm-ui-utils.h>
#include "net-device.h"
#include "net-device-mobile.h"
@@ -381,6 +382,54 @@ panel_refresh_killswitch_visibility (CcNetworkPanel *panel)
show_flight_toggle);
}
+static void
+panel_refresh_device_titles (CcNetworkPanel *panel)
+{
+ GPtrArray *ndarray, *nmdarray;
+ NetDevice **devices;
+ NMDevice **nm_devices;
+ gchar **titles;
+ gint i, num_devices;
+ NetObject *object;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ model = GTK_TREE_MODEL (gtk_builder_get_object (panel->priv->builder,
+ "liststore_devices"));
+ if (!gtk_tree_model_get_iter_first (model, &iter))
+ return;
+ ndarray = g_ptr_array_new_with_free_func (g_object_unref);
+ nmdarray = g_ptr_array_new ();
+ do {
+ gtk_tree_model_get (model, &iter,
+ PANEL_DEVICES_COLUMN_OBJECT, &object,
+ -1);
+ if (NET_IS_DEVICE (object)) {
+ g_ptr_array_add (ndarray, object);
+ g_ptr_array_add (nmdarray, net_device_get_nm_device (NET_DEVICE (object)));
+ }
+ } while (gtk_tree_model_iter_next (model, &iter));
+
+ if (!ndarray->len) {
+ g_ptr_array_free (ndarray, TRUE);
+ g_ptr_array_free (nmdarray, TRUE);
+ return;
+ }
+
+ devices = (NetDevice **)ndarray->pdata;
+ nm_devices = (NMDevice **)nmdarray->pdata;
+ num_devices = ndarray->len;
+
+ titles = nma_utils_disambiguate_device_names (nm_devices, num_devices);
+ for (i = 0; i < num_devices; i++) {
+ net_object_set_title (NET_OBJECT (devices[i]), titles[i]);
+ g_free (titles[i]);
+ }
+ g_free (titles);
+ g_ptr_array_free (ndarray, TRUE);
+ g_ptr_array_free (nmdarray, TRUE);
+}
+
static gboolean
handle_argv_for_device (CcNetworkPanel *panel,
NMDevice *device,
@@ -471,7 +520,6 @@ handle_argv (CcNetworkPanel *panel)
static gboolean
panel_add_device (CcNetworkPanel *panel, NMDevice *device)
{
- const gchar *title;
GtkListStore *liststore_devices;
GtkTreeIter iter;
NMDeviceType type;
@@ -506,7 +554,6 @@ panel_add_device (CcNetworkPanel *panel, NMDevice *device)
}
/* create device */
- title = panel_device_to_localized_string (device);
net_device = g_object_new (device_g_type,
"panel", panel,
"removable", FALSE,
@@ -515,7 +562,6 @@ panel_add_device (CcNetworkPanel *panel, NMDevice *device)
"remote-settings", panel->priv->remote_settings,
"nm-device", device,
"id", nm_device_get_udi (device),
- "title", title,
NULL);
/* add as a panel */
@@ -538,7 +584,6 @@ panel_add_device (CcNetworkPanel *panel, NMDevice *device)
&iter,
PANEL_DEVICES_COLUMN_ICON, panel_device_to_icon_name (device),
PANEL_DEVICES_COLUMN_SORT, panel_device_to_sortable_string (device),
- PANEL_DEVICES_COLUMN_TITLE, title,
PANEL_DEVICES_COLUMN_OBJECT, net_device,
-1);
@@ -577,6 +622,25 @@ panel_remove_device (CcNetworkPanel *panel, NMDevice *device)
}
static void
+get_object_title (GtkTreeViewColumn *column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ NetObject *object;
+
+ gtk_tree_model_get (model, iter,
+ PANEL_DEVICES_COLUMN_OBJECT, &object,
+ -1);
+ if (!object)
+ return;
+
+ g_object_set (cell, "text", net_object_get_title (object), NULL);
+ g_object_unref (object);
+}
+
+static void
panel_add_devices_columns (CcNetworkPanel *panel, GtkTreeView *treeview)
{
CcNetworkPanelPrivate *priv = panel->priv;
@@ -600,9 +664,11 @@ panel_add_devices_columns (CcNetworkPanel *panel, GtkTreeView *treeview)
"wrap-mode", PANGO_WRAP_WORD,
"ellipsize", PANGO_ELLIPSIZE_END,
NULL);
- column = gtk_tree_view_column_new_with_attributes ("title", renderer,
- "markup", PANEL_DEVICES_COLUMN_TITLE,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes ("title", renderer, NULL);
+ gtk_tree_view_column_set_cell_data_func (GTK_TREE_VIEW_COLUMN (column),
+ renderer,
+ get_object_title,
+ NULL, NULL);
gtk_tree_view_column_set_sort_column_id (column, PANEL_DEVICES_COLUMN_SORT);
liststore_devices = GTK_LIST_STORE (gtk_builder_get_object (priv->builder,
"liststore_devices"));
@@ -682,11 +748,11 @@ panel_add_proxy_device (CcNetworkPanel *panel)
liststore_devices = GTK_LIST_STORE (gtk_builder_get_object (panel->priv->builder,
"liststore_devices"));
title = g_strdup_printf ("%s", _("Network proxy"));
+ net_object_set_title (NET_OBJECT (proxy), title);
gtk_list_store_append (liststore_devices, &iter);
gtk_list_store_set (liststore_devices,
&iter,
PANEL_DEVICES_COLUMN_ICON, "preferences-system-network",
- PANEL_DEVICES_COLUMN_TITLE, title,
PANEL_DEVICES_COLUMN_SORT, "9",
PANEL_DEVICES_COLUMN_OBJECT, proxy,
-1);
@@ -746,6 +812,7 @@ device_added_cb (NMClient *client, NMDevice *device, CcNetworkPanel *panel)
g_debug ("New device added");
panel_add_device (panel, device);
panel_refresh_killswitch_visibility (panel);
+ panel_refresh_device_titles (panel);
}
static void
@@ -754,6 +821,7 @@ device_removed_cb (NMClient *client, NMDevice *device, CcNetworkPanel *panel)
g_debug ("Device removed");
panel_remove_device (panel, device);
panel_refresh_killswitch_visibility (panel);
+ panel_refresh_device_titles (panel);
}
static void
@@ -792,6 +860,8 @@ out:
select_first_device (panel);
}
+ panel_refresh_device_titles (panel);
+
g_debug ("Calling handle_argv() after cold-plugging devices");
handle_argv (panel);
}
@@ -833,7 +903,6 @@ static void
panel_add_vpn_device (CcNetworkPanel *panel, NMConnection *connection)
{
gchar *title;
- gchar *title_markup;
GtkListStore *liststore_devices;
GtkTreeIter iter;
NetVpn *net_vpn;
@@ -869,19 +938,16 @@ panel_add_vpn_device (CcNetworkPanel *panel, NMConnection *connection)
liststore_devices = GTK_LIST_STORE (gtk_builder_get_object (panel->priv->builder,
"liststore_devices"));
title = g_strdup_printf (_("%s VPN"), nm_connection_get_id (connection));
- title_markup = g_strdup (title);
net_object_set_title (NET_OBJECT (net_vpn), title);
gtk_list_store_append (liststore_devices, &iter);
gtk_list_store_set (liststore_devices,
&iter,
PANEL_DEVICES_COLUMN_ICON, "network-vpn",
- PANEL_DEVICES_COLUMN_TITLE, title_markup,
PANEL_DEVICES_COLUMN_SORT, "5",
PANEL_DEVICES_COLUMN_OBJECT, net_vpn,
-1);
g_free (title);
- g_free (title_markup);
}
static void
diff --git a/panels/network/net-device-mobile.c b/panels/network/net-device-mobile.c
index 18debd7..b0dc2c2 100644
--- a/panels/network/net-device-mobile.c
+++ b/panels/network/net-device-mobile.c
@@ -240,11 +240,11 @@ nm_device_mobile_refresh_ui (NetDeviceMobile *device_mobile)
NMDeviceModemCapabilities caps;
NMDevice *nm_device;
- /* set device kind */
nm_device = net_device_get_nm_device (NET_DEVICE (device_mobile));
+
+ /* set device kind */
widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder, "label_device"));
- gtk_label_set_label (GTK_LABEL (widget),
- panel_device_to_localized_string (nm_device));
+ g_object_bind_property (device_mobile, "title", widget, "label", 0);
/* set up the device on/off switch */
widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder, "device_off_switch"));
diff --git a/panels/network/net-device-simple.c b/panels/network/net-device-simple.c
index c9b80d3..0057070 100644
--- a/panels/network/net-device-simple.c
+++ b/panels/network/net-device-simple.c
@@ -101,11 +101,11 @@ nm_device_simple_refresh_ui (NetDeviceSimple *device_simple)
NMDeviceState state;
NetDeviceSimplePrivate *priv = device_simple->priv;
- /* set device kind */
nm_device = net_device_get_nm_device (NET_DEVICE (device_simple));
+
+ /* set device kind */
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "label_device"));
- gtk_label_set_label (GTK_LABEL (widget),
- panel_device_to_localized_string (nm_device));
+ g_object_bind_property (device_simple, "title", widget, "label", 0);
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "image_device"));
gtk_image_set_from_icon_name (GTK_IMAGE (widget),
panel_device_to_icon_name (nm_device),
diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c
index 2354e77..59c622b 100644
--- a/panels/network/net-device-wifi.c
+++ b/panels/network/net-device-wifi.c
@@ -780,7 +780,7 @@ nm_device_wifi_refresh_ui (NetDeviceWifi *device_wifi)
widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, "label_device"));
gtk_label_set_label (GTK_LABEL (widget),
- priv->selected_ssid_title ? priv->selected_ssid_title : panel_device_to_localized_string (nm_device));
+ priv->selected_ssid_title ? priv->selected_ssid_title : net_object_get_title (NET_OBJECT (device_wifi)));
/* only disconnect when connection active */
if (ap == active_ap) {
diff --git a/panels/network/net-object.c b/panels/network/net-object.c
index 02388b9..24a345e 100644
--- a/panels/network/net-object.c
+++ b/panels/network/net-object.c
@@ -88,6 +88,7 @@ net_object_set_id (NetObject *object, const gchar *id)
{
g_return_if_fail (NET_IS_OBJECT (object));
object->priv->id = g_strdup (id);
+ g_object_notify (G_OBJECT (object), "id");
}
gboolean
@@ -109,6 +110,7 @@ net_object_set_title (NetObject *object, const gchar *title)
{
g_return_if_fail (NET_IS_OBJECT (object));
object->priv->title = g_strdup (title);
+ g_object_notify (G_OBJECT (object), "title");
}
NMClient *
@@ -301,7 +303,7 @@ net_object_class_init (NetObjectClass *klass)
pspec = g_param_spec_string ("title", NULL, NULL,
NULL,
- G_PARAM_READWRITE);
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
g_object_class_install_property (object_class, PROP_TITLE, pspec);
pspec = g_param_spec_boolean ("removable", NULL, NULL,
diff --git a/panels/network/panel-common.c b/panels/network/panel-common.c
index 707db8d..1d38e94 100644
--- a/panels/network/panel-common.c
+++ b/panels/network/panel-common.c
@@ -69,49 +69,6 @@ panel_device_to_icon_name (NMDevice *device)
}
/**
- * panel_device_to_localized_string:
- **/
-const gchar *
-panel_device_to_localized_string (NMDevice *device)
-{
- const gchar *value = NULL;
- NMDeviceModemCapabilities caps;
- switch (nm_device_get_device_type (device)) {
- case NM_DEVICE_TYPE_UNKNOWN:
- /* TRANSLATORS: device type */
- value = _("Unknown");
- break;
- case NM_DEVICE_TYPE_ETHERNET:
- /* TRANSLATORS: device type */
- value = _("Wired");
- break;
- case NM_DEVICE_TYPE_WIFI:
- /* TRANSLATORS: device type */
- value = _("Wi-Fi");
- break;
- case NM_DEVICE_TYPE_MODEM:
- caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
- if ((caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) ||
- (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)) {
- /* TRANSLATORS: device type */
- value = _("Mobile broadband");
- }
- break;
- case NM_DEVICE_TYPE_BT:
- /* TRANSLATORS: device type */
- value = _("Bluetooth");
- break;
- case NM_DEVICE_TYPE_OLPC_MESH:
- /* TRANSLATORS: device type */
- value = _("Mesh");
- break;
- default:
- break;
- }
- return value;
-}
-
-/**
* panel_device_to_sortable_string:
*
* Try to return order of approximate connection speed.
diff --git a/panels/network/panel-common.h b/panels/network/panel-common.h
index 725824f..c55d46b 100644
--- a/panels/network/panel-common.h
+++ b/panels/network/panel-common.h
@@ -31,7 +31,6 @@
G_BEGIN_DECLS
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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]