X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fsystray%2Fsystraybar.c;h=c135077eff6515485f375bd5dc3a0c9455ee017f;hb=9ad50cc90314fb960c8eea1d41f912f6d9e402fd;hp=069a3fc8aa998a7f103699d2889e2f310f85acc1;hpb=8e711d63bec43974aa45f698302bb1016433dba0;p=chaz%2Ftint2 diff --git a/src/systray/systraybar.c b/src/systray/systraybar.c index 069a3fc..c135077 100644 --- a/src/systray/systraybar.c +++ b/src/systray/systraybar.c @@ -227,6 +227,28 @@ int window_error_handler(Display *d, XErrorEvent *e) } +static gint compare_traywindows(gconstpointer a, gconstpointer b) +{ + const TrayWindow * traywin_a = (TrayWindow*)a; + const TrayWindow * traywin_b = (TrayWindow*)b; + XTextProperty name_a, name_b; + + if(XGetWMName(server.dsp, traywin_a->id, &name_a) == 0) { + return -1; + } + else if(XGetWMName(server.dsp, traywin_b->id, &name_b) == 0) { + XFree(name_a.value); + return 1; + } + else { + gint retval = g_ascii_strncasecmp((char*)name_a.value, (char*)name_b.value, -1) * systray.sort; + XFree(name_a.value); + XFree(name_b.value); + return retval; + } +} + + gboolean add_icon(Window id) { TrayWindow *traywin; @@ -276,7 +298,8 @@ gboolean add_icon(Window id) traywin = g_new0(TrayWindow, 1); traywin->id = id; - systray.list_icons = g_slist_prepend(systray.list_icons, traywin); +// systray.list_icons = g_slist_prepend(systray.list_icons, traywin); + systray.list_icons = g_slist_insert_sorted(systray.list_icons, traywin, compare_traywindows); systray.area.resize = 1; systray.area.redraw = 1; //printf("add_icon id %lx, %d\n", id, g_slist_length(systray.list_icons));