/* gcc -g3 -o list-windows list-windows.c `pkg-config libxfcegui4-1.0 --cflags --libs` */

#include <gtk/gtk.h>
#include <libxfcegui4/libxfcegui4.h>
#include <libxfcegui4/netk-class-group.h>

int
main(int argc, char **argv)
{
    NetkScreen *netk_screen;
    GList *windows_g, *l, *windows_re = NULL, *windows_cg, *m;
    GHashTable *windows_done;
    NetkWindow *win;
    NetkClassGroup *cg;
    NetkWorkspace *ws;
    
    gtk_init(&argc, &argv);
    
    windows_done = g_hash_table_new(g_direct_hash, g_direct_equal);
    
    netk_screen = netk_screen_get(gdk_screen_get_number(gdk_display_get_default_screen(gdk_display_get_default())));
    netk_screen_force_update(netk_screen);
    
    ws = netk_screen_get_active_workspace(netk_screen);
    
    windows_g = netk_screen_get_windows(netk_screen);
    for(l = windows_g; l; l = l->next) {
        NetkWindow *w = NETK_WINDOW(l->data);
        
        if(g_hash_table_lookup(windows_done, w))
            continue;
        
        if(!netk_window_is_skip_tasklist(w)
           && netk_window_get_workspace(w) == ws)
        {
            windows_re = g_list_prepend(windows_re, w);
        }
        
        cg = netk_window_get_class_group(w);
        windows_cg = netk_class_group_get_windows(cg);
        for(m = windows_cg; m; m = m->next) {
            NetkWindow *w1 = NETK_WINDOW(m->data);
            if(w1 == w)
                continue;
            if(!netk_window_is_skip_tasklist(w1)
               && netk_window_get_workspace(w1) == ws)
            {
                windows_re = g_list_prepend(windows_re, w1);
            }
            g_hash_table_insert(windows_done, w1, GUINT_TO_POINTER(1));
        }
    }
    windows_re = g_list_reverse(windows_re);
    
    for(l = windows_re; l; l = l->next)
        g_print("%s\n", netk_window_get_name(NETK_WINDOW(l->data)));

    return 0;
}
