[gnome-control-center] network: show the AP mode and signal strength in the wireless dropdown



commit ad8223c284d6dddabb3a8f057ccbf2a7ed967e16
Author: Richard Hughes <richard hughsie com>
Date:   Wed Dec 15 19:23:40 2010 +0000

    network: show the AP mode and signal strength in the wireless dropdown

 panels/network/cc-network-panel.c |   48 +++++++++++++++++++++++++++++++++++-
 panels/network/network.ui         |    6 ++++-
 2 files changed, 51 insertions(+), 3 deletions(-)
---
diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c
index e5da7dd..70f685b 100644
--- a/panels/network/cc-network-panel.c
+++ b/panels/network/cc-network-panel.c
@@ -22,6 +22,8 @@
 
 #include "cc-network-panel.h"
 
+#include "panel-cell-renderer-mode.h"
+#include "panel-cell-renderer-signal.h"
 #include "panel-common.h"
 
 G_DEFINE_DYNAMIC_TYPE (CcNetworkPanel, cc_network_panel, CC_TYPE_PANEL)
@@ -49,6 +51,8 @@ enum {
 enum {
 	PANEL_WIRELESS_COLUMN_ID,
 	PANEL_WIRELESS_COLUMN_TITLE,
+	PANEL_WIRELESS_COLUMN_STRENGTH,
+	PANEL_WIRELESS_COLUMN_MODE,
 	PANEL_WIRELESS_COLUMN_LAST
 };
 
@@ -309,6 +313,8 @@ panel_add_device_to_listview (PanelDeviceItem *item)
 typedef struct {
 	gchar		*access_point;
 	gchar		*active_access_point;
+	guint		 strength;
+	guint		 mode;
 	CcNetworkPanel	*panel;
 } PanelAccessPointItem;
 
@@ -328,7 +334,9 @@ panel_got_proxy_access_point_cb (GObject *source_object, GAsyncResult *res, gpoi
 	GtkWidget *widget;
 	guint i = 0;
 	GVariantIter iter;
+	GVariant *variant_mode = NULL;
 	GVariant *variant_ssid = NULL;
+	GVariant *variant_strength = NULL;
 	PanelAccessPointItem *ap_item = (PanelAccessPointItem *) user_data;
 	CcNetworkPanelPrivate *priv = ap_item->panel->priv;
 
@@ -339,6 +347,14 @@ panel_got_proxy_access_point_cb (GObject *source_object, GAsyncResult *res, gpoi
 		goto out;
 	}
 
+	/* get the strength */
+	variant_strength = g_dbus_proxy_get_cached_property (proxy, "Strength");
+	ap_item->strength = g_variant_get_byte (variant_strength);
+
+	/* get the mode */
+	variant_mode = g_dbus_proxy_get_cached_property (proxy, "Mode");
+	ap_item->mode = g_variant_get_uint32 (variant_mode);
+
 	/* get the (non NULL terminated, urgh) SSID */
 	variant_ssid = g_dbus_proxy_get_cached_property (proxy, "Ssid");
 	len = g_variant_iter_init (&iter, variant_ssid);
@@ -351,7 +367,7 @@ panel_got_proxy_access_point_cb (GObject *source_object, GAsyncResult *res, gpoi
 	ssid = g_new0 (gchar, len + 1);
 	while (g_variant_iter_loop (&iter, "y", &tmp))
 		ssid[i++] = tmp;
-	g_debug ("adding access point %s", ssid);
+	g_debug ("adding access point %s (%i%%) [%i]", ssid, ap_item->strength, ap_item->mode);
 
 	/* add to the model */
 	liststore_wireless_network = GTK_LIST_STORE (gtk_builder_get_object (priv->builder,
@@ -361,6 +377,8 @@ panel_got_proxy_access_point_cb (GObject *source_object, GAsyncResult *res, gpoi
 			    &treeiter,
 			    PANEL_WIRELESS_COLUMN_ID, ap_item->access_point,
 			    PANEL_WIRELESS_COLUMN_TITLE, ssid,
+			    PANEL_WIRELESS_COLUMN_STRENGTH, ap_item->strength,
+			    PANEL_WIRELESS_COLUMN_MODE, ap_item->mode,
 			    -1);
 
 	/* is this what we're on already? */
@@ -378,6 +396,10 @@ out:
 	g_free (ssid);
 	if (variant_ssid != NULL)
 		g_variant_unref (variant_ssid);
+	if (variant_strength != NULL)
+		g_variant_unref (variant_strength);
+	if (variant_mode != NULL)
+		g_variant_unref (variant_mode);
 	if (proxy != NULL)
 		g_object_unref (proxy);
 	return;
@@ -941,9 +963,11 @@ cc_network_panel_init (CcNetworkPanel *panel)
 	GError *error;
 	gint value;
 	GSettings *settings_tmp;
+	GtkAdjustment *adjustment;
+	GtkCellRenderer *renderer;
+	GtkComboBox *combobox;
 	GtkTreePath *path;
 	GtkTreeSelection *selection;
-	GtkAdjustment *adjustment;
 	GtkWidget *widget;
 
 	panel->priv = NETWORK_PANEL_PRIVATE (panel);
@@ -1066,6 +1090,26 @@ cc_network_panel_init (CcNetworkPanel *panel)
 	gtk_tree_selection_select_path (selection, path);
 	gtk_tree_path_free (path);
 
+	/* setup wireless combobox model */
+	combobox = GTK_COMBO_BOX (gtk_builder_get_object (panel->priv->builder,
+							  "combobox_network_name"));
+
+	renderer = panel_cell_renderer_mode_new ();
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
+				    renderer,
+				    FALSE);
+	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
+					"mode", PANEL_WIRELESS_COLUMN_MODE,
+					NULL);
+
+	renderer = panel_cell_renderer_signal_new ();
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
+				    renderer,
+				    FALSE);
+	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
+					"signal", PANEL_WIRELESS_COLUMN_STRENGTH,
+					NULL);
+
 	/* disable for now */
 	widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder,
 						     "button_add"));
diff --git a/panels/network/network.ui b/panels/network/network.ui
index 251114b..b96dcbb 100644
--- a/panels/network/network.ui
+++ b/panels/network/network.ui
@@ -8,6 +8,10 @@
       <column type="gchararray"/>
       <!-- column-name title -->
       <column type="gchararray"/>
+      <!-- column-name strength -->
+      <column type="guint"/>
+      <!-- column-name mode -->
+      <column type="guint"/>
     </columns>
   </object>
   <object class="GtkListStore" id="liststore_devices">
@@ -532,7 +536,7 @@
                                       </packing>
                                     </child>
                                     <child>
-                                      <object class="GtkComboBoxText" id="combobox_network_name">
+                                      <object class="GtkComboBox" id="combobox_network_name">
                                         <property name="visible">True</property>
                                         <property name="has-entry">True</property>
                                         <property name="model">liststore_wireless_network</property>



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