[gnome-control-center] network: Sort access points by strength
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] network: Sort access points by strength
- Date: Thu, 28 Jun 2012 12:58:48 +0000 (UTC)
commit 31cd509a7502a7df9c6236554a99e1b9abf6c4b2
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Jun 27 22:42:19 2012 -0400
network: Sort access points by strength
Keep the active network at the top, and 'Other' at the bottom.
the other access points are sorted by strength now.
https://bugzilla.gnome.org/show_bug.cgi?id=678505
Signed-off-by: Richard Hughes <richard hughsie com>
panels/network/cc-network-panel.c | 54 +++++++++++++++++++++++++++---------
panels/network/network.ui | 2 +
2 files changed, 42 insertions(+), 14 deletions(-)
---
diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c
index 43858c5..be94208 100644
--- a/panels/network/cc-network-panel.c
+++ b/panels/network/cc-network-panel.c
@@ -105,6 +105,7 @@ enum {
PANEL_WIRELESS_COLUMN_STRENGTH,
PANEL_WIRELESS_COLUMN_MODE,
PANEL_WIRELESS_COLUMN_SECURITY,
+ PANEL_WIRELESS_COLUMN_ACTIVE,
PANEL_WIRELESS_COLUMN_LAST
};
@@ -970,29 +971,33 @@ add_access_point (CcNetworkPanel *panel, NMAccessPoint *ap, NMAccessPoint *activ
GtkListStore *liststore_wireless_network;
GtkTreeIter treeiter;
GtkWidget *widget;
+ gboolean is_active_ap;
ssid = nm_access_point_get_ssid (ap);
if (ssid == NULL)
return;
ssid_text = nm_utils_escape_ssid (ssid->data, ssid->len);
+ is_active_ap = active && nm_utils_same_ssid (ssid, nm_access_point_get_ssid (active), TRUE);
+
liststore_wireless_network = GTK_LIST_STORE (gtk_builder_get_object (priv->builder,
"liststore_wireless_network"));
object_path = nm_object_get_path (NM_OBJECT (ap));
- gtk_list_store_append (liststore_wireless_network, &treeiter);
- gtk_list_store_set (liststore_wireless_network,
- &treeiter,
- PANEL_WIRELESS_COLUMN_ID, object_path,
- PANEL_WIRELESS_COLUMN_TITLE, ssid_text,
- PANEL_WIRELESS_COLUMN_SORT, ssid_text,
- PANEL_WIRELESS_COLUMN_STRENGTH, nm_access_point_get_strength (ap),
- PANEL_WIRELESS_COLUMN_MODE, nm_access_point_get_mode (ap),
- PANEL_WIRELESS_COLUMN_SECURITY, get_access_point_security (ap),
- -1);
+ gtk_list_store_insert_with_values (liststore_wireless_network,
+ &treeiter,
+ -1,
+ PANEL_WIRELESS_COLUMN_ID, object_path,
+ PANEL_WIRELESS_COLUMN_TITLE, ssid_text,
+ PANEL_WIRELESS_COLUMN_SORT, ssid_text,
+ PANEL_WIRELESS_COLUMN_STRENGTH, nm_access_point_get_strength (ap),
+ PANEL_WIRELESS_COLUMN_MODE, nm_access_point_get_mode (ap),
+ PANEL_WIRELESS_COLUMN_SECURITY, get_access_point_security (ap),
+ PANEL_WIRELESS_COLUMN_ACTIVE, is_active_ap,
+ -1);
/* is this what we're on already? */
- if (active && nm_utils_same_ssid (ssid, nm_access_point_get_ssid (active), TRUE)) {
+ if (is_active_ap) {
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder,
"combobox_wireless_network_name"));
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &treeiter);
@@ -3203,13 +3208,21 @@ wireless_ap_model_sort_cb (GtkTreeModel *model,
{
gchar *str_a;
gchar *str_b;
+ gint strength_a;
+ gint strength_b;
+ gboolean active_a;
+ gboolean active_b;
gint retval;
gtk_tree_model_get (model, a,
PANEL_WIRELESS_COLUMN_SORT, &str_a,
+ PANEL_WIRELESS_COLUMN_STRENGTH, &strength_a,
+ PANEL_WIRELESS_COLUMN_ACTIVE, &active_a,
-1);
gtk_tree_model_get (model, b,
PANEL_WIRELESS_COLUMN_SORT, &str_b,
+ PANEL_WIRELESS_COLUMN_STRENGTH, &strength_b,
+ PANEL_WIRELESS_COLUMN_ACTIVE, &active_b,
-1);
/* special case blank entries to the bottom */
@@ -3222,12 +3235,24 @@ wireless_ap_model_sort_cb (GtkTreeModel *model,
goto out;
}
+ if (active_a) {
+ retval = -1;
+ goto out;
+ }
+
+ if (active_b) {
+ retval = 1;
+ goto out;
+ }
+
/* case sensitive search like before */
- g_debug ("compare %s with %s", str_a, str_b);
- retval = g_strcmp0 (str_a, str_b);
+ g_debug ("compare %s (%d) with %s (%d)", str_a, strength_a, str_b, strength_b);
+ retval = strength_b - strength_a;
+
out:
g_free (str_a);
g_free (str_b);
+
return retval;
}
@@ -3828,9 +3853,10 @@ cc_network_panel_init (CcNetworkPanel *panel)
gtk_tree_sortable_set_sort_func (sortable,
PANEL_WIRELESS_COLUMN_SORT,
wireless_ap_model_sort_cb,
- sortable,
+ panel,
NULL);
+
renderer = panel_cell_renderer_mode_new ();
gtk_cell_renderer_set_padding (renderer, 4, 0);
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
diff --git a/panels/network/network.ui b/panels/network/network.ui
index 594c46e..8ee15cf 100644
--- a/panels/network/network.ui
+++ b/panels/network/network.ui
@@ -222,6 +222,8 @@
<column type="guint"/>
<!-- column-name security -->
<column type="guint"/>
+ <!-- column-name active -->
+ <column type="gboolean"/>
</columns>
</object>
<object class="GtkListStore" id="liststore_mobile_connections">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]