rendered paste bodydiff --git a/plugins/resize.c b/plugins/resize.c
index c514ad2..42b3216 100644
--- a/plugins/resize.c
+++ b/plugins/resize.c
@@ -93,12 +93,17 @@ typedef struct _ResizeDisplay {
int mode;
XRectangle savedGeometry;
XRectangle geometry;
+ XRectangle lastGeometry;
int releaseButton;
unsigned int mask;
int pointerDx;
int pointerDy;
KeyCode key[NUM_KEYS];
+
+ Window resizeWindow;
+ Window resizedWindow;
+ CompScreen *screen;
} ResizeDisplay;
typedef struct _ResizeScreen {
@@ -298,12 +303,14 @@ resizeFinishResizing (CompDisplay *d)
{
RESIZE_DISPLAY (d);
+ /*
(*rd->w->screen->windowUngrabNotify) (rd->w);
XDeleteProperty (d->display,
rd->w->id,
rd->resizeInformationAtom);
-
+*/
+ rd->resizedWindow = None;
rd->w = NULL;
}
@@ -328,6 +335,8 @@ resizeInitiate (CompDisplay *d,
int x, y;
int button;
int i;
+
+ XSetWindowAttributes attr;
RESIZE_SCREEN (w->screen);
@@ -340,6 +349,27 @@ resizeInitiate (CompDisplay *d,
mask = getIntOptionNamed (option, nOption, "direction", 0);
+ attr.override_redirect = TRUE;
+ attr.event_mask = PropertyChangeMask;
+
+
+
+ rd->resizeWindow = XCreateWindow (d->display, w->screen->root, 0, 0,
+ w->screen->width / 2, w->screen->height,
+ 0, CopyFromParent, CopyFromParent,
+ CopyFromParent,
+ CWOverrideRedirect | CWEventMask,
+ &attr);
+
+ rd->resizedWindow = w->id;
+
+ rd->screen = w->screen;
+
+ XMapWindow (d->display, rd->resizeWindow);
+
+ XReparentWindow (d->display, w->id, rd->resizeWindow, 0, 0);
+
+
/* Initiate the resize in the direction suggested by the
* quarter of the window the mouse is in, eg drag in top left
* will resize up and to the left. Keyboard resize starts out
@@ -481,13 +511,23 @@ resizeTerminate (CompDisplay *d,
{
RESIZE_DISPLAY (d);
+ printf("Terminate 1\n");
+
if (rd->w)
{
CompWindow *w = rd->w;
XWindowChanges xwc;
unsigned int mask = 0;
- RESIZE_SCREEN (w->screen);
+ RESIZE_SCREEN (rd->screen);
+
+ printf("Term Resize id 0x%X and 0x%X\n",w->id,rd->resizeWindow);
+
+ XReparentWindow (d->display, rd->resizedWindow, rd->screen->root, 0, 0);
+ XUnmapWindow (d->display, rd->resizeWindow);
+ XDestroyWindow (d->display, rd->resizeWindow);
+
+ printf("Terminate\n");
if (rd->mode == RESIZE_MODE_NORMAL)
{
@@ -551,7 +591,7 @@ resizeTerminate (CompDisplay *d,
if (rs->grabIndex)
{
- removeScreenGrab (w->screen, rs->grabIndex, NULL);
+ removeScreenGrab (rd->screen, rs->grabIndex, NULL);
rs->grabIndex = 0;
}
@@ -568,9 +608,11 @@ resizeUpdateWindowSize (CompDisplay *d)
{
RESIZE_DISPLAY (d);
- if (rd->w->syncWait)
- return;
+ if (rd->lastGeometry.width != rd->geometry.width || rd->lastGeometry.width != rd->geometry.height)
+ XResizeWindow (d->display, rd->resizedWindow, rd->geometry.width,rd->geometry.height);
+ rd->lastGeometry = rd->geometry;
+ /*
if (rd->w->serverWidth != rd->geometry.width ||
rd->w->serverHeight != rd->geometry.height)
{
@@ -587,7 +629,9 @@ resizeUpdateWindowSize (CompDisplay *d)
CWX | CWY | CWWidth | CWHeight,
&xwc);
}
+ */
}
+
static void
resizeHandleKeyEvent (CompScreen *s,
@@ -743,6 +787,7 @@ resizeHandleMotionEvent (CompScreen *s,
rd->pointerDy += yRoot - lastPointerY;
}
+
if (rd->mask & ResizeLeftMask)
w -= rd->pointerDx;
else if (rd->mask & ResizeRightMask)
@@ -752,14 +797,15 @@ resizeHandleMotionEvent (CompScreen *s,
h -= rd->pointerDy;
else if (rd->mask & ResizeDownMask)
h += rd->pointerDy;
-
+/*
if (rd->w->state & CompWindowStateMaximizedVertMask)
h = rd->w->serverHeight;
if (rd->w->state & CompWindowStateMaximizedHorzMask)
w = rd->w->serverWidth;
+*/
- constrainNewWindowSize (rd->w, w, h, &w, &h);
+// constrainNewWindowSize (rd->w, w, h, &w, &h);
if (rd->mode != RESIZE_MODE_NORMAL)
{
@@ -795,7 +841,7 @@ resizeHandleMotionEvent (CompScreen *s,
}
resizeUpdateWindowProperty (s->display);
- resizeSendResizeNotify (s->display);
+ //resizeSendResizeNotify (s->display);
}
}
@@ -948,10 +994,12 @@ resizeHandleEvent (CompDisplay *d,
{
int option;
+ /*
option = RESIZE_DISPLAY_OPTION_INITIATE_BUTTON;
resizeTerminate (d, &rd->opt[option].value.action, 0, NULL, 0);
option = RESIZE_DISPLAY_OPTION_INITIATE_KEY;
resizeTerminate (d, &rd->opt[option].value.action, 0, NULL, 0);
+ */
}
default:
break;