[network-manager-netbook] Fix the sorting of same type list items (bnc #536428).



commit a5c4fe9dc72b992f941d13e210cc51453bf2ad10
Author: Tambet Ingo <tambet gmail com>
Date:   Thu Sep 3 13:15:54 2009 +0300

    Fix the sorting of same type list items (bnc #536428).

 src/nmn-item.c      |    8 ++++++++
 src/nmn-item.h      |    2 ++
 src/nmn-list.c      |   28 +++++++++++++++++++++-------
 src/nmn-wifi-item.c |    8 +-------
 4 files changed, 32 insertions(+), 14 deletions(-)
---
diff --git a/src/nmn-item.c b/src/nmn-item.c
index 0659621..1c1e425 100644
--- a/src/nmn-item.c
+++ b/src/nmn-item.c
@@ -75,6 +75,14 @@ nmn_item_set_name (NmnItem *item,
     g_free (s);
 }
 
+const char *
+nmn_item_get_name (NmnItem *item)
+{
+    g_return_val_if_fail (NMN_IS_ITEM (item), NULL);
+
+    gtk_label_get_text (GTK_LABEL (NMN_ITEM_GET_PRIVATE (item)->name));
+}
+
 void
 nmn_item_set_status_visible (NmnItem *item,
                              gboolean visible)
diff --git a/src/nmn-item.h b/src/nmn-item.h
index 117f382..31e6931 100644
--- a/src/nmn-item.h
+++ b/src/nmn-item.h
@@ -64,6 +64,8 @@ GtkWidget *nmn_item_new (void);
 void       nmn_item_set_name (NmnItem *item,
                               const char *name);
 
+const char *nmn_item_get_name (NmnItem *item);
+
 void       nmn_item_set_status_visible (NmnItem *item,
                                         gboolean visible);
 
diff --git a/src/nmn-list.c b/src/nmn-list.c
index 5d5b13d..c619112 100644
--- a/src/nmn-list.c
+++ b/src/nmn-list.c
@@ -17,6 +17,7 @@
  * (C) Copyright 2009 Novell, Inc.
  */
 
+#include <string.h>
 #include "nmn-list.h"
 
 #define NMN_DRAG_TARGET "NMN_DRAG_TARGET"
@@ -141,17 +142,30 @@ static gint
 compare_items (gconstpointer a,
                gconstpointer b)
 {
-    guint aa;
-    guint bb;
+    NmnItem *a_item = NMN_ITEM (a);
+    NmnItem *b_item = NMN_ITEM (b);
+    const char *a_label;
+    const char *b_label;
+    guint a_priority;
+    guint b_priority;
 
-    aa = nmn_item_get_priority (NMN_ITEM (a));
-    bb = nmn_item_get_priority (NMN_ITEM (b));
+    a_priority = nmn_item_get_priority (a_item);
+    b_priority = nmn_item_get_priority (b_item);
 
-    if (aa < bb)
+    if (a_priority < b_priority)
         return 1;
 
-    if (aa == bb)
-        return 0;
+    if (a_priority > b_priority)
+        return -1;
+
+    a_label = nmn_item_get_name (a_item);
+    b_label = nmn_item_get_name (b_item);
+
+    if (a_label && b_label)
+        return strcmp (a_label, b_label);
+
+    if (a_label)
+        return 1;
 
     return -1;
 }
diff --git a/src/nmn-wifi-item.c b/src/nmn-wifi-item.c
index 1d57d82..c8b4f79 100644
--- a/src/nmn-wifi-item.c
+++ b/src/nmn-wifi-item.c
@@ -497,13 +497,7 @@ disconnect (NmnItem *item)
 static guint
 get_priority (NmnItem *item)
 {
-    guint priority;
-
-    priority = NMN_ITEM_CLASS (nmn_wifi_item_parent_class)->get_priority (item) + 20;
-
-    /* FIXME: Add some more based on SSID? signal strength? */
-
-    return priority;
+    return NMN_ITEM_CLASS (nmn_wifi_item_parent_class)->get_priority (item) + 20;
 }
 
 static const char *



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