Index: beryl-core/include/beryl.h =================================================================== --- beryl-core/include/beryl.h (Revision 1701) +++ beryl-core/include/beryl.h (Arbeitskopie) @@ -26,7 +26,7 @@ #ifndef _BERYL_H #define _BERYL_H -#define BERYL_VERSION 33 +#define BERYL_VERSION 34 #define BERYL_ABI_INFO \ BERYL_VERSION, \ @@ -1708,6 +1708,7 @@ GLint stencilRef; Bool cleared; + Bool changingViewports; Bool lighting; Bool slowAnimations; Index: beryl-core/src/screen.c =================================================================== --- beryl-core/src/screen.c (Revision 1701) +++ beryl-core/src/screen.c (Arbeitskopie) @@ -3054,6 +3054,8 @@ if (!tx && !ty) return; + s->changingViewports = TRUE; + s->x += tx; s->y += ty; @@ -3117,6 +3119,8 @@ if (sync) setDesktopHints(s); + + s->changingViewports = FALSE; } void moveWindowToViewportPosition(CompWindow * w, int x, Bool sync) Index: beryl-group-tab/group.c =================================================================== --- beryl-group-tab/group.c (Revision 1701) +++ beryl-group-tab/group.c (Arbeitskopie) @@ -463,27 +463,9 @@ WRAP(gs, w->screen, windowMoveNotify, groupWindowMoveNotify); groupUpdatePosBuffer(w, WIN_X(w) + dx, WIN_Y(w) + dy, WIN_WIDTH(w), WIN_HEIGHT(w)); - // workaround for viewports - Bool vpMove = FALSE; - if ((dx % w->screen->workArea.width == 0 && dx != 0) || - (dy % w->screen->workArea.height == 0 && dy != 0)) { - vpMove = TRUE; - - // If this window is tabbed but not visible, it shouldn't - // be affected by viewport moves, so move back to original position. - if(gw->inGroup && gw->group->tabbed && - gw->group->topTab != -1 && - TOP_TAB(gw->group)->id != w->id) - { - UNWRAP(gs, w->screen, windowMoveNotify); - moveWindow(w, -dx, -dy, TRUE, FALSE); - WRAP(gs, w->screen, windowMoveNotify, groupWindowMoveNotify); - } - } - if (!gw->inGroup || gw->group->animationSteps || - vpMove || + w->screen->changingViewports || IPCS_GetBoolND(IPCS_OBJECT(w), "SHOWDESKTOP_MOVE", FALSE) || IPCS_GetBoolND(IPCS_OBJECT(w->screen->display), "SCALE_INIT", FALSE) || !gs->opt[GROUP_SCREEN_OPTION_MOVE].value.b ||