All pastes #333002 Raw Edit

Miscellany

public text v1 · immutable
#333002 ·published 2007-01-30 16:33 UTC
rendered paste body
Index: include/beryl.h
===================================================================
--- include/beryl.h	(Revision 3425)
+++ include/beryl.h	(Arbeitskopie)
@@ -26,7 +26,7 @@
 #ifndef _BERYL_H
 #define _BERYL_H
 
-#define BERYL_VERSION 49
+#define BERYL_VERSION 50
 
 #define BERYL_ABI_INFO \
     BERYL_VERSION, \
@@ -2243,6 +2243,8 @@
     Bool shaded;
     Bool hidden;
 
+	Bool grabbed;
+
     int texCoordSize;
     int indexCount;
 
Index: src/window.c
===================================================================
--- src/window.c	(Revision 3425)
+++ src/window.c	(Arbeitskopie)
@@ -1844,6 +1844,7 @@
 	w->inShowDesktopMode = FALSE;
 	w->shaded = FALSE;
 	w->hidden = FALSE;
+	w->grabbed = FALSE;
 
 	// optional variables
 	w->texCoordSize = 2;		// default: only S and T (no R or Q coordinate)
@@ -2511,10 +2512,14 @@
 
 		updateFrameWindow(w);
 	}
-	else if (w->attrib.x != x || w->attrib.y != y)
+	else if ((w->attrib.x != x || w->attrib.y != y) && !w->grabbed)
 	{
 		int dx, dy;
 
+		/* only update the position of non-grabbed windows - it's in the 
+		   responsibility of a grabbing plugin to sync the window position
+		   after ungrab */
+
 		dx = x - w->attrib.x;
 		dy = y - w->attrib.y;
 
@@ -2808,15 +2813,17 @@
 windowGrabNotify(CompWindow * w,
 				 int x, int y, unsigned int state, unsigned int mask)
 {
+	w->grabbed = TRUE;
 }
 
 void windowUngrabNotify(CompWindow * w)
 {
+	w->grabbed = FALSE;
 }
 
 void windowStateChangeNotify(CompWindow * w)
 {
-		w->lastState=w->state;
+	w->lastState = w->state;
 }
 
 static Bool isGroupTransient(CompWindow * w, Window clientLeader)