!7 cmodule MoveModulesEffect > DynSingleFunction { transient L entries; sclass Entry { S module; Rect original; Pt destiny; } void doIt { entries = synchroList(); final int w = dm_desktopWidth(), mid = w/2, margin = 20, steps = 10; try { for (S module : dm_visibleModuleIDs()) { Rect r = dm_frameRect(module); if (r == null) continue; Pt destiny = pt(r.x >= mid ? w+margin : -margin-r.w, r.y); entries.add(nu(Entry.class, +module, original := r, +destiny)); } for _i to steps: { final int i = _i; swing { for (Entry e : entries) dm_setBounds(e.module, blend(e.original.x, e.destiny.x, doubleRatio(i, steps-1)), blend(e.original.y, e.destiny.y, doubleRatio(i, steps-1)), e.original.w, e.original.h); }} } finally { for (Entry e : entries) dm_setBounds(e.module, e.original); } } }