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 */