Index: beryl-plugins/src/wobbly.c =================================================================== --- beryl-plugins/src/wobbly.c (Revision 888) +++ beryl-plugins/src/wobbly.c (Arbeitskopie) @@ -3211,7 +3211,6 @@ else { modelMove (ww->model, dx, dy); - } } Index: beryl-plugins/src/resize.c =================================================================== --- beryl-plugins/src/resize.c (Revision 888) +++ beryl-plugins/src/resize.c (Arbeitskopie) @@ -186,14 +186,9 @@ return; if (move_only) { - if (rd->currentX != rd->w->serverX || rd->currentY != rd->w->serverY) { - moveWindow(rd->w, rd->currentX - rd->w->attrib.x, rd->currentY - rd->w->attrib.y, - TRUE, FALSE); - - syncWindowPosition(rd->w); - damageScreen(rd->w->screen); - } - + moveWindow(rd->w, rd->currentX - rd->w->attrib.x, rd->currentY - rd->w->attrib.y, + TRUE, FALSE); + syncWindowPosition(rd->w); return; } @@ -208,8 +203,6 @@ IPCS_SetBoolN (IPCS_OBJECT(rd->w), "WOBBLY_WAS_RESIZED", TRUE); moveResizeWindow(rd->w, &xwc, CWX | CWY | CWWidth | CWHeight, 0); - syncWindowPosition(rd->w); - damageScreen(rd->w->screen); } static void resizeConstrainMinMax (CompWindow *w, @@ -539,16 +532,12 @@ if (state & CompActionStateCancel) { XWindowChanges xwc; - sendSyncRequest (rd->w); - xwc.x = rd->savedAttrib.x; xwc.y = rd->savedAttrib.y; xwc.width = rd->savedAttrib.width; xwc.height = rd->savedAttrib.height; - XConfigureWindow (d->display, rd->w->id, - CWX | CWY | CWWidth | CWHeight, - &xwc); + moveResizeWindow(rd->w, &xwc, CWX | CWY | CWWidth | CWHeight, 0); } else if (rd->resizeMode == ResizeModeStretch) { rd->stretch_finish = 1; (*rd->w->screen->setWindowScale) (rd->w, 1.0f, 1.0f); Index: beryl-core/src/window.c =================================================================== --- beryl-core/src/window.c (Revision 888) +++ beryl-core/src/window.c (Arbeitskopie) @@ -3265,10 +3265,14 @@ moveResizeWindow (CompWindow * w, XWindowChanges * xwc, unsigned int xwcm, int gravity) { + int dx = 0, dy = 0; Bool placed = xwcm & (CWX | CWY); xwcm &= (CWX | CWY | CWWidth | CWHeight | CWBorderWidth); + if (!xwc) + return; + if (gravity == 0) gravity = w->sizeHints.win_gravity; @@ -3420,21 +3424,32 @@ if (xwcm & (CWX | CWY | CWWidth | CWHeight)) addWindowDamage(w); - resizeWindow(w, (xwcm & CWX) ? xwc->x : w->attrib.x, (xwcm & CWY) ? xwc->y : w->attrib.y, - (xwcm & CWWidth) ? xwc->width : w->serverWidth, (xwcm & CWHeight) ? xwc->height : w->serverHeight, w->attrib.border_width); + if (xwcm & CWX) { + dx = xwc->x - w->attrib.x; + w->serverX = xwc->x; + w->attrib.x = xwc->x; + } - if (xwcm & CWX) w->attrib.x = xwc->x; - if (xwcm & CWY) w->attrib.y = xwc->y; + if (xwcm & CWY) { + dy = xwc->y - w->attrib.y; + w->serverY = xwc->y; + w->attrib.y = xwc->y; + } - if (w->mapNum && (xwcm & (CWWidth | CWHeight))) + if (w->mapNum) updateWindowRegion(w); + + if (w->frame) { + if (xwcm & (CWX | CWY)) + XMoveWindow (w->screen->display->display, w->frame, + w->serverX - w->input.left, w->serverY - w->input.top); + updateFrameWindow(w); + } - updateFrameWindow(w); configureXWindow (w, xwcm, xwc); - if (w->frame && (xwcm & (CWX | CWY))) - XMoveWindow (w->screen->display->display, w->frame, - w->attrib.x - w->input.left, w->attrib.y - w->input.top); + if (dx || dy) (*w->screen->windowMoveNotify) (w, dx, dy, TRUE); + (*w->screen->windowResizeNotify) (w); if (placed) w->placed = TRUE;