add: if (wPreferences.auto_arrange_icons) wArrangeIcons(scr, True);
context: appIconMouseDown(WObjDescriptor *desc, XEvent *event){    WAppIcon *aicon = desc->parent;    WIcon *icon = aicon->icon;    XEvent ev;    int x=aicon->x_pos, y=aicon->y_pos;    int dx=event->xbutton.x, dy=event->xbutton.y;    int grabbed=0;    int done=0;    int superfluous = wPreferences.superfluous; /* we catch it to avoid problems */    WScreen *scr = icon->core->screen_ptr;    WWorkspace *workspace = scr->workspaces[scr->current_workspace];    int shad_x = 0, shad_y = 0, docking=0, dockable, collapsed = 0;    int ix, iy;    int clickButton = event->xbutton.button;    Pixmap ghost = None;    if (aicon->editing || WCHECK_STATE(WSTATE_MODAL))	return;        if (IsDoubleClick(scr, event)) {	iconDblClick(desc, event);	return;    }    if (event->xbutton.button == Button3) {	WObjDescriptor *desc;	WApplication *wapp = wApplicationOf(aicon->icon->owner->main_window);	if (!wapp)	    return;	openApplicationMenu(wapp, event->xbutton.x_root, 			    event->xbutton.y_root);	/* allow drag select of menu */	desc = &scr->icon_menu->menu->descriptor;	event->xbutton.send_event = True;	(*desc->handle_mousedown)(desc, event);	return;    }#ifdef DEBUG    puts("Moving icon");#endif    if (event->xbutton.state & MOD_MASK)	wLowerFrame(icon->core);    else	wRaiseFrame(icon->core);        if (XGrabPointer(dpy, icon->core->window, True, ButtonMotionMask		     |ButtonReleaseMask|ButtonPressMask, GrabModeAsync,		     GrabModeAsync, None, None, CurrentTime) !=GrabSuccess) {	wwarning("pointer grab failed for appicon move");    }    if (wPreferences.flags.nodock && wPreferences.flags.noclip)      dockable = 0;    else      dockable = canBeDocked(icon->owner);    while (!done) {	WMMaskEvent(dpy, PointerMotionMask|ButtonReleaseMask|ButtonPressMask		    |ButtonMotionMask|ExposureMask, &ev);	switch (ev.type) {	 case Expose:	    WMHandleEvent(&ev);	    break;	 case MotionNotify:	    if (!grabbed) {		if (abs(dx-ev.xmotion.x)>=MOVE_THRESHOLD		    || abs(dy-ev.xmotion.y)>=MOVE_THRESHOLD) {		    XChangeActivePointerGrab(dpy, ButtonMotionMask					    |ButtonReleaseMask|ButtonPressMask, 					     wCursor[WCUR_MOVE], CurrentTime);		    grabbed=1;		} else {		    break;		}	    }	    x = ev.xmotion.x_root - dx;	    y = ev.xmotion.y_root - dy;	    XMoveWindow(dpy, icon->core->window, x, y);	    if (dockable) {                if (scr->dock && wDockSnapIcon(scr->dock, aicon, x, y,                                               &ix, &iy, False)) {                    shad_x = scr->dock->x_pos + ix*wPreferences.icon_size;		    shad_y = scr->dock->y_pos + iy*wPreferences.icon_size;                    if (scr->last_dock != scr->dock && collapsed) {                        scr->last_dock->collapsed = 1;                        wDockHideIcons(scr->last_dock);                        collapsed = 0;                    }                    if (!collapsed && (collapsed = scr->dock->collapsed)) {                        scr->dock->collapsed = 0;                        wDockShowIcons(scr->dock);                    }                    if (scr->dock->auto_raise_lower)                        wDockRaise(scr->dock);                    scr->last_dock = scr->dock;		    XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y);		    if (!docking) {			Window wins[2];			wins[0] = icon->core->window;			wins[1] = scr->dock_shadow;			XRestackWindows(dpy, wins, 2);                        if (superfluous) {			if (icon->pixmap!=None)			    ghost = MakeGhostIcon(scr, icon->pixmap);			else			    ghost = MakeGhostIcon(scr, icon->core->window);			XSetWindowBackgroundPixmap(dpy, scr->dock_shadow,						   ghost);			XClearWindow(dpy, scr->dock_shadow);                        }                        XMapWindow(dpy, scr->dock_shadow);		    }		    docking = 1;                } else if (workspace->clip &&                           wDockSnapIcon(workspace->clip, aicon, x, y,                                         &ix, &iy, False)) {                    shad_x = workspace->clip->x_pos + ix*wPreferences.icon_size;		    shad_y = workspace->clip->y_pos + iy*wPreferences.icon_size;		                        if (scr->last_dock != workspace->clip && collapsed) {                        scr->last_dock->collapsed = 1;                        wDockHideIcons(scr->last_dock);                        collapsed = 0;                    }                    if (!collapsed && (collapsed = workspace->clip->collapsed)) {                        workspace->clip->collapsed = 0;                        wDockShowIcons(workspace->clip);                    }                    if (workspace->clip->auto_raise_lower)                        wDockRaise(workspace->clip);                    scr->last_dock = workspace->clip;		    XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y);		    if (!docking) {			Window wins[2];			wins[0] = icon->core->window;			wins[1] = scr->dock_shadow;			XRestackWindows(dpy, wins, 2);                        if (superfluous) {			if (icon->pixmap!=None)			    ghost = MakeGhostIcon(scr, icon->pixmap);			else			    ghost = MakeGhostIcon(scr, icon->core->window);			XSetWindowBackgroundPixmap(dpy, scr->dock_shadow,						   ghost);			XClearWindow(dpy, scr->dock_shadow);                        }			XMapWindow(dpy, scr->dock_shadow);		    }                    docking = 1;		} else if (docking) {		    XUnmapWindow(dpy, scr->dock_shadow);                    docking = 0;		}            }	    break;	 case ButtonPress:	    break;	 case ButtonRelease:	    if (ev.xbutton.button != clickButton)		break;	    XUngrabPointer(dpy, CurrentTime);            if (docking) {		Bool docked;		/* icon is trying to be docked */		SlideWindow(icon->core->window, x, y, shad_x, shad_y);		XUnmapWindow(dpy, scr->dock_shadow);                docked = wDockAttachIcon(scr->last_dock, aicon, ix, iy);                if (scr->last_dock->auto_collapse) {                    collapsed = 0;                }                if (workspace->clip &&                    workspace->clip != scr->last_dock &&                    workspace->clip->auto_raise_lower)                    wDockLower(workspace->clip);		if (!docked) {		    /* If icon could not be docked, slide it back to the old		     * position */		    SlideWindow(icon->core->window, x, y, aicon->x_pos, 				aicon->y_pos);		}            } else {		XMoveWindow(dpy, icon->core->window, x, y);		aicon->x_pos = x;		aicon->y_pos = y;                if (workspace->clip && workspace->clip->auto_raise_lower)                    wDockLower(workspace->clip);            }	    if (collapsed) {		scr->last_dock->collapsed = 1;		wDockHideIcons(scr->last_dock);		collapsed = 0;	    }	    if (superfluous) {		if (ghost!=None)		    XFreePixmap(dpy, ghost);		XSetWindowBackground(dpy, scr->dock_shadow, scr->white_pixel);	    }	    done = 1;	    break;	}    }#ifdef DEBUG    puts("End icon move");#endif    }