I could get the bug reproduced, and tryed to craft a patch (attached, it's mainly Matej Vela's patch replacing some 'unsigned long' with 'Window') but it's still not it (even if skippy doesn't crash anymore).
I do not have a amd64 at hand, so debuging this is quite hard, if you have such machine and wish to test things please patch with this : http://cxhome.ath.cx/~xaiki/999_gruick_make_xsync.patch (adding it to debian/patches should do, yes I should make it a runtime flag ...) Thanks to maxyz for the help he provided !
diff -Nur skippy-0.5.1rc1/clientwin.c skippy-0.5.1rc1.new/clientwin.c --- skippy-0.5.1rc1/clientwin.c 2005-10-18 13:15:02.000000000 -0300 +++ skippy-0.5.1rc1.new/clientwin.c 2006-06-27 14:05:35.000000000 -0300 @@ -32,8 +32,8 @@ int clientwin_validate_func(dlist *l, void *data) { - ClientWin *cw = (ClientWin *)l->data; - CARD32 desktop = (*(CARD32*)data), + ClientWin *cw = (ClientWin *)l->data; + Window desktop = (*(Window*)data), w_desktop = wm_get_window_desktop(cw->mainwin->dpy, cw->client.window); #ifdef XINERAMA @@ -43,7 +43,7 @@ return 0; #endif - return (w_desktop == (CARD32)-1 || desktop == w_desktop) && + return (w_desktop == (Window)-1 || desktop == w_desktop) && wm_validate_window(cw->mainwin->dpy, cw->client.window); } diff -Nur skippy-0.5.1rc1/skippy.c skippy-0.5.1rc1.new/skippy.c --- skippy-0.5.1rc1/skippy.c 2006-04-25 15:37:44.000000000 -0300 +++ skippy-0.5.1rc1.new/skippy.c 2006-06-27 14:05:35.000000000 -0300 @@ -75,7 +75,7 @@ int die = 0; dlist *iter, *tmp; Window dummy_w, *tree_windows; - CARD32 desktop = wm_get_current_desktop(mw->dpy); + Window desktop = wm_get_current_desktop(mw->dpy); Bool refocus = False; /* Update the main window's geometry (and Xinerama info if applicable) */ diff -Nur skippy-0.5.1rc1/wm.c skippy-0.5.1rc1.new/wm.c --- skippy-0.5.1rc1/wm.c 2005-10-18 13:15:02.000000000 -0300 +++ skippy-0.5.1rc1.new/wm.c 2006-06-27 14:05:35.000000000 -0300 @@ -260,7 +260,7 @@ return 0; for(i = 0; i < items_read; i++) - l = dlist_add(l, (void*)((CARD32*)data)[i]); + l = dlist_add(l, (void*)((Window*)data)[i]); XFree(data); @@ -295,10 +295,10 @@ return rootpmap; } -CARD32 +Window wm_get_current_desktop(Display *dpy) { - CARD32 desktop = 0; + Window desktop = 0; unsigned char *data; int status, real_format; Atom real_type; @@ -311,7 +311,7 @@ if(status != Success) return 0; if(items_read) - desktop = ((CARD32*)data)[0]; + desktop = ((Window*)data)[0]; XFree(data); return desktop; @@ -493,7 +493,7 @@ return result; } else { - CARD32 attr; + unsigned char attr; status = XGetWindowProperty(dpy, win, _WIN_STATE, 0L, 1L, False, XA_CARDINAL, &real_type, &real_format, @@ -504,9 +504,9 @@ XFree(data); return 0; } - attr = (((CARD32*)data)[0]) & (WIN_STATE_MINIMIZED | - WIN_STATE_SHADED | - WIN_STATE_HIDDEN); + attr = ((data)[0]) & (WIN_STATE_MINIMIZED | + WIN_STATE_SHADED | + WIN_STATE_HIDDEN); if(attr) result = 0; XFree(data); @@ -524,7 +524,7 @@ XFree(data); return 1; /* If there's no _WIN_HINTS, assume it's 0, thus valid */ } - attr = ((CARD32*)data)[0]; + attr = data[0]; if(attr & WIN_HINTS_SKIP_TASKBAR) result = 0; XFree(data); @@ -534,14 +534,14 @@ } } -CARD32 +Window wm_get_window_desktop(Display *dpy, Window win) { int status, real_format; Atom real_type; unsigned long items_read, items_left; unsigned char *data; - CARD32 desktop = 0; + Window desktop = 0; if(WM_PERSONALITY == WM_PERSONALITY_GNOME) { @@ -551,7 +551,7 @@ if(status == Success) { if(items_read) - desktop = (((CARD32*)data)[0] & WIN_STATE_STICKY) ? (CARD32)-1 : 0; + desktop = (((Window*)data)[0] & WIN_STATE_STICKY) ? (Window)-1 : 0; XFree(data); @@ -569,7 +569,7 @@ return wm_get_current_desktop(dpy); if(items_read) - desktop = ((CARD32*)data)[0]; + desktop = ((Window*)data)[0]; else desktop = wm_get_current_desktop(dpy); diff -Nur skippy-0.5.1rc1/wm.h skippy-0.5.1rc1.new/wm.h --- skippy-0.5.1rc1/wm.h 2005-10-18 13:15:02.000000000 -0300 +++ skippy-0.5.1rc1.new/wm.h 2006-06-27 14:05:35.000000000 -0300 @@ -74,12 +74,12 @@ void wm_sawfish_focus(Bool b); dlist *wm_get_stack(Display *dpy); Pixmap wm_get_root_pmap(Display *dpy); -CARD32 wm_get_current_desktop(Display *dpy); +Window wm_get_current_desktop(Display *dpy); FcChar8 *wm_get_window_title(Display *dpy, Window window, int *length_return); Window wm_get_group_leader(Display *dpy, Window window); void wm_set_fullscreen(Display *dpy, Window window, int x, int y, unsigned int width, unsigned int height); int wm_validate_window(Display *dpy, Window win); -CARD32 wm_get_window_desktop(Display *dpy, Window win); +Window wm_get_window_desktop(Display *dpy, Window win); Window wm_get_focused(Display *dpy); void wm_ignore_skip_taskbar(Bool b); void wm_prepare_snap(Display *dpy, Window win, wm_snap_state_t *state);
-- Niv Sardi-Altivanik <[EMAIL PROTECTED]> - = Debian::GNU/Linux::Addict = - > Random Fortune (To make your day better if not wiser) < That which is not good for the swarm, neither is it good for the bee.