[gimp] app: sort plugged devices to the start of the list



commit 3facba67d4b995aefe4241b242f39f35ec0085d0
Author: Michael Natterer <mitch gimp org>
Date:   Sun Feb 14 22:08:32 2010 +0100

    app: sort plugged devices to the start of the list
    
    and sort plugged/unplugged devices alphabetically

 app/widgets/gimpdeviceinfo.c |   22 ++++++++++++++++++++++
 app/widgets/gimpdeviceinfo.h |    3 +++
 app/widgets/gimpdevices.c    |    3 +++
 3 files changed, 28 insertions(+), 0 deletions(-)
---
diff --git a/app/widgets/gimpdeviceinfo.c b/app/widgets/gimpdeviceinfo.c
index 5dab018..47fcf4a 100644
--- a/app/widgets/gimpdeviceinfo.c
+++ b/app/widgets/gimpdeviceinfo.c
@@ -555,6 +555,9 @@ gimp_device_info_set_device (GimpDeviceInfo *info,
     gimp_device_info_set_key (info, i,
                               info->keys[i].keyval,
                               info->keys[i].modifiers);
+
+  /*  sort order depends on device presence  */
+  gimp_object_name_changed (GIMP_OBJECT (info));
 }
 
 GdkInputMode
@@ -710,3 +713,22 @@ gimp_device_info_get_by_device (GdkDevice *device)
 
   return g_object_get_data (G_OBJECT (device), GIMP_DEVICE_INFO_DATA_KEY);
 }
+
+gint
+gimp_device_info_compare (GimpDeviceInfo *a,
+                          GimpDeviceInfo *b)
+{
+  if (a->device && ! b->device)
+    {
+      return 1;
+    }
+  else if (! a->device && b->device)
+    {
+      return -1;
+    }
+  else
+    {
+      return - strcmp (gimp_object_get_name (a),
+                       gimp_object_get_name (b));
+    }
+}
diff --git a/app/widgets/gimpdeviceinfo.h b/app/widgets/gimpdeviceinfo.h
index 0d104d2..b0a41a4 100644
--- a/app/widgets/gimpdeviceinfo.h
+++ b/app/widgets/gimpdeviceinfo.h
@@ -106,6 +106,9 @@ void             gimp_device_info_changed           (GimpDeviceInfo *info);
 
 GimpDeviceInfo * gimp_device_info_get_by_device     (GdkDevice      *device);
 
+gint             gimp_device_info_compare           (GimpDeviceInfo *a,
+                                                     GimpDeviceInfo *b);
+
 
 G_END_DECLS
 
diff --git a/app/widgets/gimpdevices.c b/app/widgets/gimpdevices.c
index 822b7f9..4f615d2 100644
--- a/app/widgets/gimpdevices.c
+++ b/app/widgets/gimpdevices.c
@@ -112,6 +112,9 @@ gimp_devices_init (Gimp                   *gimp,
   manager->current_device   = gdk_display_get_core_pointer (gdk_display);
   manager->change_notify    = change_notify;
 
+  gimp_list_set_sort_func (GIMP_LIST (manager->device_info_list),
+                           (GCompareFunc) gimp_device_info_compare);
+
   displays = gdk_display_manager_list_displays (disp_manager);
 
   /*  present displays in the order in which they were opened  */



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