From 3facba67d4b995aefe4241b242f39f35ec0085d0 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Sun, 14 Feb 2010 22:08:32 +0100 Subject: [PATCH] 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(+) diff --git a/app/widgets/gimpdeviceinfo.c b/app/widgets/gimpdeviceinfo.c index 5dab0189a8..47fcf4a368 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 0d104d24d0..b0a41a4a97 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 822b7f9875..4f615d2cff 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 */