Hi all,

attached is a patch which extends the window resize notify function:
Instead of just passing the CompWindow*, additionally the resize
difference information is passed (difference of position, width and
height).
Originally, I wrote this one for Beryl as we needed it for the group
plugin, but I think it makes sense that Compiz also has this for the
sake of plugin interoperability; especially as the move notify function
also does have the dx and dy parameters.

Hope that's helpful :-)

Regards,

Danny
diff --git a/include/compiz.h b/include/compiz.h
index 2cf59b4..9fdcd32 100644
--- a/include/compiz.h
+++ b/include/compiz.h
@@ -26,7 +26,7 @@
 #ifndef _COMPIZ_H
 #define _COMPIZ_H
 
-#define ABIVERSION 20070201
+#define ABIVERSION 20070220
 
 #include <stdio.h>
 #include <sys/time.h>
@@ -1417,7 +1417,11 @@ typedef void (*GetOutputExtentsForWindowProc) (CompWindow	 *w,
 
 typedef Bool (*FocusWindowProc) (CompWindow *window);
 
-typedef void (*WindowResizeNotifyProc) (CompWindow *window);
+typedef void (*WindowResizeNotifyProc) (CompWindow *window, 
+				        int        dx,
+					int        dy,
+					int        dwidth,
+					int        dheight);
 
 typedef void (*WindowMoveNotifyProc) (CompWindow *window,
 				      int	 dx,
@@ -2285,7 +2289,11 @@ Bool
 focusWindow (CompWindow *w);
 
 void
-windowResizeNotify (CompWindow *w);
+windowResizeNotify (CompWindow *w,
+		    int	       dx,
+		    int	       dy,
+		    int	       dwidth,
+		    int	       dheight);
 
 void
 windowMoveNotify (CompWindow *w,
diff --git a/plugins/blur.c b/plugins/blur.c
index 090f35f..9cb0a0c 100644
--- a/plugins/blur.c
+++ b/plugins/blur.c
@@ -1406,7 +1406,11 @@ blurHandleEvent (CompDisplay *d,
 }
 
 static void
-blurWindowResizeNotify (CompWindow *w)
+blurWindowResizeNotify (CompWindow *w,
+			int	   dx,
+			int	   dy,
+			int	   dwidth,
+			int	   dheight)
 {
     BLUR_SCREEN (w->screen);
 
@@ -1420,7 +1424,7 @@ blurWindowResizeNotify (CompWindow *w)
     }
 
     UNWRAP (bs, w->screen, windowResizeNotify);
-    (*w->screen->windowResizeNotify) (w);
+    (*w->screen->windowResizeNotify) (w, dx, dy, dwidth, dheight);
     WRAP (bs, w->screen, windowResizeNotify, blurWindowResizeNotify);
 }
 
diff --git a/plugins/decoration.c b/plugins/decoration.c
index 9ea0e55..de1aeab 100644
--- a/plugins/decoration.c
+++ b/plugins/decoration.c
@@ -1186,7 +1186,11 @@ decorWindowMoveNotify (CompWindow *w,
 }
 
 static void
-decorWindowResizeNotify (CompWindow *w)
+decorWindowResizeNotify (CompWindow *w,
+			 int	    dx,
+			 int	    dy,
+			 int	    dwidth,
+			 int	    dheight)
 {
     DECOR_SCREEN (w->screen);
 
@@ -1194,7 +1198,7 @@ decorWindowResizeNotify (CompWindow *w)
 	updateWindowDecorationScale (w);
 
     UNWRAP (ds, w->screen, windowResizeNotify);
-    (*w->screen->windowResizeNotify) (w);
+    (*w->screen->windowResizeNotify) (w, dx, dy, dwidth, dheight);
     WRAP (ds, w->screen, windowResizeNotify, decorWindowResizeNotify);
 }
 
diff --git a/plugins/fade.c b/plugins/fade.c
index 9e22041..1123805 100644
--- a/plugins/fade.c
+++ b/plugins/fade.c
@@ -650,7 +650,11 @@ fadeFocusWindow (CompWindow *w)
 }
 
 static void
-fadeWindowResizeNotify (CompWindow *w)
+fadeWindowResizeNotify (CompWindow *w,
+			int	   dx,
+			int	   dy,
+			int	   dwidth,
+			int	   dheight)
 {
     FADE_SCREEN (w->screen);
 
@@ -658,7 +662,7 @@ fadeWindowResizeNotify (CompWindow *w)
 	fadeWindowStop (w);
 
     UNWRAP (fs, w->screen, windowResizeNotify);
-    (*w->screen->windowResizeNotify) (w);
+    (*w->screen->windowResizeNotify) (w, dx, dy, dwidth, dheight);
     WRAP (fs, w->screen, windowResizeNotify, fadeWindowResizeNotify);
 }
 
diff --git a/plugins/minimize.c b/plugins/minimize.c
index b03ae34..b85a7d3 100644
--- a/plugins/minimize.c
+++ b/plugins/minimize.c
@@ -272,7 +272,7 @@ minSetShade (CompWindow *w,
     w->matrix.x0 -= (w->attrib.x * w->matrix.xx);
     w->matrix.y0 -= ((w->attrib.y - (h - shade)) * w->matrix.yy);
 
-    (*w->screen->windowResizeNotify) (w);
+    (*w->screen->windowResizeNotify) (w, 0, 0, 0, 0);
 }
 
 static Bool
diff --git a/plugins/wobbly.c b/plugins/wobbly.c
index 960aaf3..e2c1f86 100644
--- a/plugins/wobbly.c
+++ b/plugins/wobbly.c
@@ -2553,7 +2553,11 @@ wobblyDamageWindowRect (CompWindow *w,
 }
 
 static void
-wobblyWindowResizeNotify (CompWindow *w)
+wobblyWindowResizeNotify (CompWindow *w,
+			  int	     dx,
+			  int        dy,
+			  int	     dwidth,
+			  int	     dheight)
 {
     WOBBLY_SCREEN (w->screen);
     WOBBLY_WINDOW (w);
@@ -2626,7 +2630,7 @@ wobblyWindowResizeNotify (CompWindow *w)
     }
 
     UNWRAP (ws, w->screen, windowResizeNotify);
-    (*w->screen->windowResizeNotify) (w);
+    (*w->screen->windowResizeNotify) (w, dx, dy, dwidth, dheight);
     WRAP (ws, w->screen, windowResizeNotify, wobblyWindowResizeNotify);
 }
 
diff --git a/src/window.c b/src/window.c
index 123920f..e7fe28b 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1065,7 +1065,7 @@ updateWindowOutputExtents (CompWindow *w)
     {
 	w->output = output;
 
-	(*w->screen->windowResizeNotify) (w);
+	(*w->screen->windowResizeNotify) (w, 0, 0, 0, 0);
     }
 }
 
@@ -2204,6 +2204,7 @@ resizeWindow (CompWindow *w,
 	w->attrib.border_width != borderWidth)
     {
 	unsigned int pw, ph, actualWidth, actualHeight, ui;
+	int	     dx, dy, dwidth, dheight;
 	Pixmap	     pixmap = None;
 	Window	     root;
 	Status	     result;
@@ -2234,6 +2235,11 @@ resizeWindow (CompWindow *w,
 
 	addWindowDamage (w);
 
+	dx      = x - w->attrib.x;
+	dy      = y - w->attrib.y;
+	dwidth  = width - w->attrib.width;
+	dheight = height - w->attrib.height;
+
 	w->attrib.x	       = x;
 	w->attrib.y	       = y;
 	w->attrib.width	       = width;
@@ -2250,7 +2256,7 @@ resizeWindow (CompWindow *w,
 	if (w->mapNum)
 	    updateWindowRegion (w);
 
-	(*w->screen->windowResizeNotify) (w);
+	(*w->screen->windowResizeNotify) (w, dx, dy, dwidth, dheight);
 
 	addWindowDamage (w);
 
@@ -2518,7 +2524,11 @@ focusWindow (CompWindow *w)
 }
 
 void
-windowResizeNotify (CompWindow *w)
+windowResizeNotify (CompWindow *w,
+		    int        dx,
+		    int	       dy,
+		    int	       dwidth,
+		    int        dheight)
 {
 }
 
_______________________________________________
compiz mailing list
compiz@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/compiz

Reply via email to