From 40eb18a3910b248f53bb884ecc0fe04534f2872c Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Wed, 2 May 2007 19:36:43 +0000 Subject: [PATCH] Sorting out icons --- src/desktop.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/desktop.c b/src/desktop.c index 4969be3..a826691 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -720,13 +720,14 @@ void desktop_icon_remove(Desktop * desktop, DesktopIcon * icon) desktopicon_delete(icon); desktop->icon_cnt--; for(; i < desktop->icon_cnt; i++) - desktop->icon[i] = desktop->icon[i+1]; - desktop_icons_align(desktop); + desktop->icon[i] = desktop->icon[i + 1]; } + desktop_icons_align(desktop); } /* desktop_icons_align */ +static int _align_compare(const void * a, const void * b); void desktop_icons_align(Desktop * desktop) { GdkScreen * screen; @@ -735,6 +736,7 @@ void desktop_icons_align(Desktop * desktop) int x = 0; int y = 0; + qsort(desktop->icon, desktop->icon_cnt, sizeof(void*), _align_compare); if((screen = gdk_screen_get_default()) != NULL) height = gdk_screen_get_height(screen); for(i = 0; i < desktop->icon_cnt; i++) @@ -749,6 +751,14 @@ void desktop_icons_align(Desktop * desktop) } } +static int _align_compare(const void * a, const void * b) +{ + DesktopIcon * icona = *(DesktopIcon**)a; + DesktopIcon * iconb = *(DesktopIcon**)b; + + return strcmp(desktopicon_get_path(icona), desktopicon_get_path(iconb)); +} + /* usage */ static int _usage(void)