[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

compiz: Changes to 'upstream-unstable'



 Makefile.am                                 |    2 
 NEWS                                        |   26 ++
 compiz-cube.pc.in                           |    2 
 compiz-scale.pc.in                          |    2 
 configure.ac                                |    9 
 gtk/gnome/50-compiz-desktop-key.xml.in      |    2 
 gtk/window-decorator/gtk-window-decorator.c |  309 ++++++++++++++++------------
 gtk/window-decorator/gwd.schemas.in         |   11 
 include/compiz.h                            |   30 +-
 include/cube.h                              |    4 
 kde/window-decorator/decorator.cpp          |   28 +-
 kde/window-decorator/decorator.h            |    9 
 kde/window-decorator/main.cpp               |   12 -
 kde/window-decorator/window.cpp             |   49 ++--
 kde/window-decorator/window.h               |    7 
 libdecoration/Makefile.am                   |    5 
 metadata/Makefile.am                        |    3 
 metadata/fade.xml.in                        |    5 
 metadata/resize.xml.in                      |   16 -
 metadata/rotate.xml.in                      |    4 
 metadata/schemas.xslt                       |   21 +
 plugins/cube.c                              |   34 +--
 plugins/decoration.c                        |   60 +++--
 plugins/fade.c                              |   27 +-
 plugins/fuse.c                              |    3 
 plugins/gconf.c                             |   37 ++-
 plugins/ini.c                               |   22 +
 plugins/inotify.c                           |    2 
 plugins/place.c                             |   28 +-
 plugins/plane.c                             |    1 
 plugins/resize.c                            |   43 ++-
 plugins/scale.c                             |    2 
 plugins/switcher.c                          |    6 
 plugins/video.c                             |    6 
 plugins/wobbly.c                            |   17 +
 src/display.c                               |   67 ++----
 src/event.c                                 |  135 ++++++++++--
 src/option.c                                |   15 -
 src/screen.c                                |   93 +++++---
 src/session.c                               |    7 
 src/window.c                                |  210 +++++++++++++------
 41 files changed, 902 insertions(+), 469 deletions(-)

New commits:
commit 8a1e4e0543fee3c2b4efd6840591488d87c84443
Author: Danny Baumann <dannybaumann@web.de>
Date:   Fri Oct 19 19:58:28 2007 +0200

    Fix typo.

diff --git a/plugins/place.c b/plugins/place.c
index 3fa4d9c..258e450 100644
--- a/plugins/place.c
+++ b/plugins/place.c
@@ -1169,8 +1169,8 @@ placeWin (CompWindow *window,
 	    /* clip to screen if parent is visible in current viewport */
 	    if (parent->serverX < parent->screen->width   &&
 		parent->serverX + parent->serverWidth > 0 &&
-		parent->serverY < parent->screen->height  &&)
-		parent->serverY + parent->serverHeight > 0
+		parent->serverY < parent->screen->height  &&
+		parent->serverY + parent->serverHeight > 0)
 	    {
 		XRectangle area;
 		int        output;

commit 5c4eab6ab6964a4f555b2921f9f01ec2c4b5196e
Author: Danny Baumann <dannybaumann@web.de>
Date:   Sat Nov 3 11:28:21 2007 +0100

    Fix typo.

diff --git a/src/event.c b/src/event.c
index 6a9340d..9e4c7f7 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1952,6 +1952,7 @@ handleEvent (CompDisplay *d,
 			}
 			else
 			    restackWindowBelow (w, p);
+		    }
 		}
 
 		if (w->minimized)

commit 65792e9bcc5e1486568454f32733a070553a94f8
Author: Danny Baumann <dannybaumann@web.de>
Date:   Mon Nov 5 09:05:36 2007 +0100

    Clip transient child placement to parent output instead of current output.

diff --git a/plugins/place.c b/plugins/place.c
index 4408c46..3fa4d9c 100644
--- a/plugins/place.c
+++ b/plugins/place.c
@@ -1173,8 +1173,10 @@ placeWin (CompWindow *window,
 		parent->serverY + parent->serverHeight > 0
 	    {
 		XRectangle area;
+		int        output;
 
-		get_workarea_of_current_output_device (window->screen, &area);
+		output = outputDeviceForWindow (parent);
+		getWorkareaForOutput (window->screen, output, &area);
 
 		if (x + window_width > area.x + area.width)
 		    x = area.x + area.width - window_width;

commit d29a8bdf1f90dfa11847daf78205966cf982782c
Author: Danny Baumann <dannybaumann@web.de>
Date:   Sat Nov 3 11:27:04 2007 +0100

    Prevent transient children being stacked below their parent if their focus was denied.

diff --git a/src/event.c b/src/event.c
index 6e072c3..6a9340d 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1940,7 +1940,18 @@ handleEvent (CompDisplay *d,
 
 		    /* window is above active window so we should lower it */
 		    if (p)
-			restackWindowBelow (w, p);
+		    {
+			/* restack window right above its transient parent
+			   if it has one; restack right under active window
+			   otherwise */
+			if (w->transientFor)
+			{
+			    p = findWindowAtDisplay (d, w->transientFor);
+			    if (p)
+				restackWindowAbove (w, p);
+			}
+			else
+			    restackWindowBelow (w, p);
 		}
 
 		if (w->minimized)

commit d46228314410c9d320e1c65f15632d19b025d733
Author: Danny Baumann <dannybaumann@web.de>
Date:   Thu Nov 1 18:45:42 2007 +0100

    Compare to wmType, not type variable.
    Docks that have below state flag shouldn't be hidden in showdesktop mode, so we have to have a look at the real window type.

diff --git a/src/screen.c b/src/screen.c
index 2130ca3..f1326e2 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -1317,7 +1317,7 @@ enterShowDesktopMode (CompScreen *s)
 
     for (w = s->windows; w; w = w->next)
     {
-	if ((s->showingDesktopMask & w->type) &&
+	if ((s->showingDesktopMask & w->wmType) &&
 	    (!(w->state & CompWindowStateSkipTaskbarMask) || st->value.b))
 	{
 	    if (!w->inShowDesktopMode && (*s->focusWindow) (w))

commit b92e6ff07c393ad61cf8c65a2cd3b5fd679a726c
Author: Danny Baumann <dannybaumann@web.de>
Date:   Fri Oct 19 19:57:01 2007 +0200

    Also check if parent's Y coordinate is inside the current viewport.

diff --git a/plugins/place.c b/plugins/place.c
index 0ea4477..4408c46 100644
--- a/plugins/place.c
+++ b/plugins/place.c
@@ -1167,8 +1167,10 @@ placeWin (CompWindow *window,
 	    y += window->input.top;
 
 	    /* clip to screen if parent is visible in current viewport */
-	    if (parent->serverX < parent->screen->width &&
-		parent->serverX + parent->serverWidth > 0)
+	    if (parent->serverX < parent->screen->width   &&
+		parent->serverX + parent->serverWidth > 0 &&
+		parent->serverY < parent->screen->height  &&)
+		parent->serverY + parent->serverHeight > 0
 	    {
 		XRectangle area;
 

commit 612ce08ae4c93c5ba3cb6e6a82f3105c1c222d30
Author: Danny Baumann <dannybaumann@web.de>
Date:   Fri Oct 19 19:48:21 2007 +0200

    We don't need to constrain y movement after placing transients.

diff --git a/plugins/place.c b/plugins/place.c
index 2f57608..0ea4477 100644
--- a/plugins/place.c
+++ b/plugins/place.c
@@ -1184,7 +1184,7 @@ placeWin (CompWindow *window,
 
 	    avoid_being_obscured_as_second_modal_dialog (window, &x, &y);
 
-	    goto done_no_x_constraints;
+	    goto done_no_constraints;
 	}
     }
 
@@ -1344,7 +1344,6 @@ done:
     if (x - window->input.left < work_area.x)
 	x = work_area.x + window->input.left;
 
-done_no_x_constraints:
     if (y + window_height + window->input.bottom >
 	work_area.y + work_area.height)
 	y = work_area.y + work_area.height

commit 7e6173d9800a5305668bbb537dc001e0b64aaf08
Author: Danny Baumann <dannybaumann@web.de>
Date:   Tue Oct 23 18:16:14 2007 +0200

    Don't switch to selected window if switcher was cancelled.

diff --git a/plugins/switcher.c b/plugins/switcher.c
index b79fe6f..435b76f 100644
--- a/plugins/switcher.c
+++ b/plugins/switcher.c
@@ -736,6 +736,12 @@ switchTerminate (CompDisplay     *d,
 
 	    ss->switching = FALSE;
 
+	    if (state & CompActionStateCancel)
+	    {
+		ss->selectedWindow = None;
+		ss->zoomedWindow   = None;
+	    }
+
 	    if (state && ss->selectedWindow)
 	    {
 		w = findWindowAtScreen (s, ss->selectedWindow);

commit c9009efd1a2dbc975541b11b170143dc2e5cf912
Author: David Reveman <davidr@novell.com>
Date:   Tue Oct 30 14:14:33 2007 -0400

    Add --sm-disable option to kwd.

diff --git a/kde/window-decorator/main.cpp b/kde/window-decorator/main.cpp
index e979973..d4058d8 100644
--- a/kde/window-decorator/main.cpp
+++ b/kde/window-decorator/main.cpp
@@ -32,6 +32,7 @@
 
 static const KCmdLineOptions options[] = {
     { "replace", "Replace existing window decorator", 0 },
+    { "sm-disable", "Disable connection to session manager", 0 },
     { "opacity <value>", "Decoration opacity", "0.75" },
     { "no-opacity-shade", "No decoration opacity shading", 0 },
     { "active-opacity <value>", "Active decoration opacity", "1.0" },
@@ -83,6 +84,9 @@ main (int argc, char **argv)
 
     app = new KWD::Decorator ();
 
+    if (args->isSet ("sm-disable"))
+	app->disableSessionManagement ();
+
     if (!XDamageQueryExtension (qt_xdisplay (), &event, &error))
     {
 	fprintf (stderr,

commit e05dc4556e87b83c37d1f3cbf5b68598f51757cd
Author: David Reveman <davidr@novell.com>
Date:   Tue Oct 30 14:06:36 2007 -0400

    Reparent window just before mapping it and avoid hiding it
    when reloading decorations.

diff --git a/kde/window-decorator/window.cpp b/kde/window-decorator/window.cpp
index 56cba0b..5165995 100644
--- a/kde/window-decorator/window.cpp
+++ b/kde/window-decorator/window.cpp
@@ -63,6 +63,7 @@ KWD::Window::Window (WId  parentId,
 		     int  w,
 		     int  h): QWidget (0, 0),
     mType (type),
+    mParentId (parentId),
     mFrame (0),
     mClientId (clientId),
     mSelectedId (0),
@@ -122,8 +123,6 @@ KWD::Window::Window (WId  parentId,
 	mGeometry = QRect (50, 50, 30, 1);
     }
 
-    XReparentWindow (qt_xdisplay (), winId (), parentId, 0, 0);
-
     setGeometry (QRect (mGeometry.x () + ROOT_OFF_X,
 			mGeometry.y () + ROOT_OFF_Y,
 			mGeometry.width (), mGeometry.height ()));
@@ -1157,6 +1156,8 @@ KWD::Window::resizeDecoration (bool force)
     {
 	mPendingMap = 1;
 
+	XReparentWindow (qt_xdisplay (), winId (), mParentId, 0, 0);
+
 	show ();
 
 	mMapped = true;
@@ -1497,8 +1498,6 @@ KWD::Window::reloadDecoration (void)
     delete mDecor;
     mDecor = 0;
 
-    hide ();
-
     mMapped   = false;
     mShapeSet = false;
 
diff --git a/kde/window-decorator/window.h b/kde/window-decorator/window.h
index e9d6496..eb4a8d3 100644
--- a/kde/window-decorator/window.h
+++ b/kde/window-decorator/window.h
@@ -199,6 +199,7 @@ class Window:public QWidget, public KDecorationBridge {
 
     private:
 	Type mType;
+	WId mParentId;
 	WId mFrame;
 	WId mClientId;
 	WId mSelectedId;

commit 0ba8a8cf8fbc531a81d3ed6c9f00cdadc7943cb1
Author: David Reveman <davidr@novell.com>
Date:   Tue Oct 30 13:52:45 2007 -0400

    Don't remove WType_TopLevel bit when reloading decorations.

diff --git a/kde/window-decorator/window.cpp b/kde/window-decorator/window.cpp
index ff86b7e..56cba0b 100644
--- a/kde/window-decorator/window.cpp
+++ b/kde/window-decorator/window.cpp
@@ -1497,7 +1497,6 @@ KWD::Window::reloadDecoration (void)
     delete mDecor;
     mDecor = 0;
 
-    setWFlags (getWFlags () & ~WType_TopLevel);
     hide ();
 
     mMapped   = false;

commit c9aafe60701d93dbb2666a4fa10412e49386eed2
Author: David Reveman <davidr@novell.com>
Date:   Tue Oct 30 13:51:40 2007 -0400

    Make mCompositeWindow an X window instead of a QWidget.

diff --git a/kde/window-decorator/decorator.cpp b/kde/window-decorator/decorator.cpp
index 9342084..893820b 100644
--- a/kde/window-decorator/decorator.cpp
+++ b/kde/window-decorator/decorator.cpp
@@ -195,8 +195,9 @@ KWD::Decorator::Decorator (void) : DCOPObject ("KWinInterface"),
     mDBusQtConnection (this),
     mCompositeWindow (0)
 {
-    DCOPClient *client;
-    int	       i, j;
+    XSetWindowAttributes attr;
+    DCOPClient		 *client;
+    int			 i, j;
 
     mRootInfo = new NETRootInfo (qt_xdisplay (), 0);
 
@@ -232,15 +233,19 @@ KWD::Decorator::Decorator (void) : DCOPObject ("KWinInterface"),
     mShadowOptions.shadow_color[1] = SHADOW_COLOR_GREEN;
     mShadowOptions.shadow_color[2] = SHADOW_COLOR_BLUE;
 
-    mCompositeWindow = new QWidget (0, "KWDCompositeWidget",
-				    Qt::WType_TopLevel | Qt::WStyle_NoBorder |
-				    Qt::WX11BypassWM);
+    attr.override_redirect = True;
 
-    mCompositeWindow->setGeometry (QRect (-ROOT_OFF_X, -ROOT_OFF_Y, 1, 1));
-    mCompositeWindow->show ();
+    mCompositeWindow = XCreateWindow (qt_xdisplay (), qt_xrootwin (),
+				      -ROOT_OFF_X, -ROOT_OFF_Y, 1, 1, 0,
+				      CopyFromParent,
+				      CopyFromParent,
+				      CopyFromParent,
+				      CWOverrideRedirect, &attr);
 
-    XCompositeRedirectSubwindows (qt_xdisplay (), mCompositeWindow->winId (),
+    XCompositeRedirectSubwindows (qt_xdisplay (), mCompositeWindow,
 				  CompositeRedirectManual);
+
+    XMapWindow (qt_xdisplay (), mCompositeWindow);
 }
 
 KWD::Decorator::~Decorator (void)
@@ -256,8 +261,7 @@ KWD::Decorator::~Decorator (void)
     if (mDecorActive)
 	delete mDecorActive;
 
-    /* XXX: mCompositeWindow is not deleted, some plugins seem to rely on
-       it not being deleted... not sure what to do about this. */
+    XDestroyWindow (qt_xdisplay (), mCompositeWindow);
 
     delete mOptions;
     delete mPlugins;
@@ -299,9 +303,9 @@ KWD::Decorator::enableDecorations (Time timestamp,
 
     updateShadow ();
 
-    mDecorNormal = new KWD::Window (mCompositeWindow->winId (), qt_xrootwin (),
+    mDecorNormal = new KWD::Window (mCompositeWindow, qt_xrootwin (),
 				    0, Window::Default);
-    mDecorActive = new KWD::Window (mCompositeWindow->winId (), qt_xrootwin (),
+    mDecorActive = new KWD::Window (mCompositeWindow, qt_xrootwin (),
 				    0, Window::DefaultActive);
 
     connect (mKWinModule, SIGNAL (windowAdded (WId)),
@@ -918,8 +922,7 @@ KWD::Decorator::handleWindowAdded (WId id)
     {
 	if (!mClients.contains (id))
 	{
-	    client = new KWD::Window (mCompositeWindow->winId (),
-				      id, frame, type,
+	    client = new KWD::Window (mCompositeWindow, id, frame, type,
 				      x, y,
 				      width + border * 2,
 				      height + border * 2);
@@ -941,7 +944,7 @@ KWD::Decorator::handleWindowAdded (WId id)
     {
 	if (!mClients.contains (id))
 	{
-	    client = new KWD::Window (mCompositeWindow->winId (), id, 0, type,
+	    client = new KWD::Window (mCompositeWindow, id, 0, type,
 				      x, y,
 				      width + border * 2,
 				      height + border * 2);
diff --git a/kde/window-decorator/decorator.h b/kde/window-decorator/decorator.h
index 1453844..077eebf 100644
--- a/kde/window-decorator/decorator.h
+++ b/kde/window-decorator/decorator.h
@@ -176,7 +176,7 @@ class Decorator:public KApplication, public KWinInterface {
 	KWinModule *mKWinModule;
 	DBusConnection *mDBusConnection;
 	DBusQt::Connection mDBusQtConnection;
-	QWidget *mCompositeWindow;
+	WId mCompositeWindow;
     };
 }
 

commit 6a3329d59d8ab28bf61a1006b8f5a134cf069b33
Author: David Reveman <davidr@novell.com>
Date:   Tue Oct 30 11:58:35 2007 -0400

    Remove whitespaces.

diff --git a/kde/window-decorator/window.cpp b/kde/window-decorator/window.cpp
index 568dbe6..ff86b7e 100644
--- a/kde/window-decorator/window.cpp
+++ b/kde/window-decorator/window.cpp
@@ -90,7 +90,7 @@ KWD::Window::Window (WId  parentId,
     if (mType == Normal || mType == Switcher)
     {
 	KWin::WindowInfo wInfo = KWin::windowInfo (mClientId, NET::WMState |
-			                           NET::WMVisibleName, 0);
+						   NET::WMVisibleName, 0);
 
 	mState = wInfo.state ();
 

commit a9185e9d482b629f7d0697af00eb26ca65a2630f
Author: David Reveman <davidr@novell.com>
Date:   Tue Oct 30 11:57:44 2007 -0400

    Reparent window instead of flipping the WType_TopLevel bit.

diff --git a/kde/window-decorator/decorator.cpp b/kde/window-decorator/decorator.cpp
index 19e10d6..9342084 100644
--- a/kde/window-decorator/decorator.cpp
+++ b/kde/window-decorator/decorator.cpp
@@ -299,9 +299,9 @@ KWD::Decorator::enableDecorations (Time timestamp,
 
     updateShadow ();
 
-    mDecorNormal = new KWD::Window (mCompositeWindow, qt_xrootwin (),
+    mDecorNormal = new KWD::Window (mCompositeWindow->winId (), qt_xrootwin (),
 				    0, Window::Default);
-    mDecorActive = new KWD::Window (mCompositeWindow, qt_xrootwin (),
+    mDecorActive = new KWD::Window (mCompositeWindow->winId (), qt_xrootwin (),
 				    0, Window::DefaultActive);
 
     connect (mKWinModule, SIGNAL (windowAdded (WId)),
@@ -918,7 +918,8 @@ KWD::Decorator::handleWindowAdded (WId id)
     {
 	if (!mClients.contains (id))
 	{
-	    client = new KWD::Window (mCompositeWindow, id, frame, type,
+	    client = new KWD::Window (mCompositeWindow->winId (),
+				      id, frame, type,
 				      x, y,
 				      width + border * 2,
 				      height + border * 2);
@@ -940,7 +941,7 @@ KWD::Decorator::handleWindowAdded (WId id)
     {
 	if (!mClients.contains (id))
 	{
-	    client = new KWD::Window (mCompositeWindow, id, 0, type,
+	    client = new KWD::Window (mCompositeWindow->winId (), id, 0, type,
 				      x, y,
 				      width + border * 2,
 				      height + border * 2);
diff --git a/kde/window-decorator/window.cpp b/kde/window-decorator/window.cpp
index e64dbe9..568dbe6 100644
--- a/kde/window-decorator/window.cpp
+++ b/kde/window-decorator/window.cpp
@@ -54,14 +54,14 @@
 #include <qcursor.h>
 #include <qpopupmenu.h>
 
-KWD::Window::Window (QWidget *parent,
-		     WId     clientId,
-		     WId     frame,
-		     Type    type,
-		     int     x,
-		     int     y,
-		     int     w,
-		     int     h): QWidget (parent, 0),
+KWD::Window::Window (WId  parentId,
+		     WId  clientId,
+		     WId  frame,
+		     Type type,
+		     int  x,
+		     int  y,
+		     int  w,
+		     int  h): QWidget (0, 0),
     mType (type),
     mFrame (0),
     mClientId (clientId),
@@ -122,6 +122,8 @@ KWD::Window::Window (QWidget *parent,
 	mGeometry = QRect (50, 50, 30, 1);
     }
 
+    XReparentWindow (qt_xdisplay (), winId (), parentId, 0, 0);
+
     setGeometry (QRect (mGeometry.x () + ROOT_OFF_X,
 			mGeometry.y () + ROOT_OFF_Y,
 			mGeometry.width (), mGeometry.height ()));
@@ -1159,11 +1161,6 @@ KWD::Window::resizeDecoration (bool force)
 
 	mMapped = true;
 
-	/* XXX: is there a more appropriate way to achieve this?
-	   add WType_TopLevel flag so that visualRect isn't clipped
-	   to parent. */
-	setWFlags (getWFlags () | WType_TopLevel);
-
 	if (mDamageId != winId ())
 	{
 	    mDamageId = winId ();
diff --git a/kde/window-decorator/window.h b/kde/window-decorator/window.h
index 8472677..e9d6496 100644
--- a/kde/window-decorator/window.h
+++ b/kde/window-decorator/window.h
@@ -54,7 +54,7 @@ class Window:public QWidget, public KDecorationBridge {
 	};
 
     public:
-	Window (QWidget *parent, WId clientId, WId frame, Type type,
+	Window (WId parentId, WId clientId, WId frame, Type type,
 		int x = 0, int y = 0, int w = 1, int h = 1);
 	~Window (void);
 

commit 4795df0e1831a5d9bb323c7a03e896dbd4e1517a
Author: Danny Baumann <dannybaumann@web.de>
Date:   Thu Oct 18 18:16:44 2007 +0200

    Post-release version increment.

diff --git a/configure.ac b/configure.ac
index 79b315e..554d1b5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@ dnl An odd micro number indicates in-progress development.
 dnl An even micro number indicates a released version.
 m4_define(compiz_version_major, 0)
 m4_define(compiz_version_minor, 6)
-m4_define(compiz_version_micro, 2)
+m4_define(compiz_version_micro, 3)
 
 AC_INIT([compiz],
 	[compiz_version_major().compiz_version_minor().compiz_version_micro()],

commit 111d5994a8b5a0a3b4b8bf12b566dcd2a7c51d30
Author: Danny Baumann <dannybaumann@web.de>
Date:   Thu Oct 18 15:18:57 2007 +0200

    Bump version.

diff --git a/configure.ac b/configure.ac
index 0b38ab8..79b315e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@ dnl An odd micro number indicates in-progress development.
 dnl An even micro number indicates a released version.
 m4_define(compiz_version_major, 0)
 m4_define(compiz_version_minor, 6)
-m4_define(compiz_version_micro, 1)
+m4_define(compiz_version_micro, 2)
 
 AC_INIT([compiz],
 	[compiz_version_major().compiz_version_minor().compiz_version_micro()],

commit 37337ac8ab3a79d609ea205092bdf1d31ac3b849
Author: Danny Baumann <dannybaumann@web.de>
Date:   Thu Oct 18 15:18:46 2007 +0200

    Add NEWS entry for 0.6.2 release.

diff --git a/NEWS b/NEWS
index 2cd0639..ab115cf 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,15 @@
+Release 0.6.2 (2007-10-18 Danny Baumann <dannybaumann@web.de>)
+==============================================================
+Stable release.
+
+Support for automatically starting one decorator per screen.
+
+Various stacking problem fixes.
+
+Fixes for various focus issues.
+
+Minor other bug fixes.
+
 Release 0.6.0 (2007-10-01 Danny Baumann <dannybaumann@web.de>)
 ==============================================================
 Third stable release of Compiz.

commit e022d349c43d8b6f2b6579e0d2a318dd89ef8d41
Author: Danny Baumann <dannybaumann@web.de>
Date:   Tue Oct 16 18:28:10 2007 +0200

    putenv doesn't work properly with dynamically allocated strings that are free'd right after the putenv call.

diff --git a/src/screen.c b/src/screen.c
index 31b1293..2130ca3 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -3125,15 +3125,13 @@ runCommand (CompScreen *s,
     if (fork () == 0)
     {
 	/* build a display string that uses the right screen number */
-	int  stringLen;
-	char *pos, *delimiter, *screenString, *colon;
+	/* 5 extra chars should be enough for pretty much every situation */
+	int  stringLen = strlen (s->display->displayString) + 5;
+	char screenString[stringLen];
+	char *pos, *delimiter, *colon;
 	
 	setsid ();
 
-	/* 5 extra chars should be enough for pretty much every situation */
-	stringLen    = strlen (s->display->displayString) + 5;
-	screenString = malloc (sizeof (char) * (stringLen + 1));
-
 	if (screenString)
 	{
 	    strcpy (screenString, s->display->displayString);
@@ -3156,7 +3154,6 @@ runCommand (CompScreen *s,
 		      "%s.%d", colon, s->screenNum);
 
 	    putenv (screenString);
-	    free (screenString);
 	}
 	else
 	{

commit 23485c5e7f1b16e169a166d4b89a96e68df88f61
Author: Danny Baumann <dannybaumann@web.de>
Date:   Tue Oct 16 18:15:47 2007 +0200

    Run external commands with a DISPLAY string adjusted for the screen number that was passed to runCommand.

diff --git a/src/screen.c b/src/screen.c
index 142616d..31b1293 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -3124,8 +3124,45 @@ runCommand (CompScreen *s,
 
     if (fork () == 0)
     {
+	/* build a display string that uses the right screen number */
+	int  stringLen;
+	char *pos, *delimiter, *screenString, *colon;
+	
 	setsid ();
-	putenv (s->display->displayString);
+
+	/* 5 extra chars should be enough for pretty much every situation */
+	stringLen    = strlen (s->display->displayString) + 5;
+	screenString = malloc (sizeof (char) * (stringLen + 1));
+
+	if (screenString)
+	{
+	    strcpy (screenString, s->display->displayString);
+	    delimiter = strrchr (screenString, ':');
+	    if (delimiter)
+	    {
+		colon = "";
+		delimiter = strchr (delimiter, '.');
+		if (delimiter)
+		    *delimiter = '\0';
+	    }
+	    else
+	    {
+		/* insert :0 to keep the syntax correct */
+		colon = ":0";
+	    }
+	    pos = screenString + strlen (screenString);
+
+	    snprintf (pos, stringLen - (pos - screenString),
+		      "%s.%d", colon, s->screenNum);
+
+	    putenv (screenString);
+	    free (screenString);
+	}
+	else
+	{
+	    putenv (s->display->displayString);
+	}
+
 	execl ("/bin/sh", "/bin/sh", "-c", command, NULL);
 	exit (0);
     }

commit c79b6fdd9c7a6fd4527211e7b7783cbeaac20448
Author: Danny Baumann <dannybaumann@web.de>
Date:   Tue Oct 16 18:00:07 2007 +0200

    Get private pointer for the current screen.

diff --git a/plugins/decoration.c b/plugins/decoration.c
index d40ff3a..ca49e21 100644
--- a/plugins/decoration.c
+++ b/plugins/decoration.c
@@ -1137,7 +1137,7 @@ decorSetDisplayOption (CompPlugin      *plugin,
 
 	    for (s = display->screens; s; s = s->next)
 	    {
-		DECOR_SCREEN (display->screens);
+		DECOR_SCREEN (s);
 
 		if (!ds->dmWin)
 		    runCommand (s, o->value.s);

commit b27df3fd8180443d66d79bc1495676b567b0b2be
Author: Tomas Carnecky <tom@dbservice.com>
Date:   Fri Oct 12 14:02:17 2007 +0200

    Start window decorator on all screens.

diff --git a/plugins/decoration.c b/plugins/decoration.c
index 79f69ad..d40ff3a 100644
--- a/plugins/decoration.c
+++ b/plugins/decoration.c
@@ -1133,21 +1133,14 @@ decorSetDisplayOption (CompPlugin      *plugin,
     case DECOR_DISPLAY_OPTION_COMMAND:
 	if (compSetStringOption (o, value))
 	{
-	    if (display->screens && *o->value.s != '\0')
+	    CompScreen *s;
+
+	    for (s = display->screens; s; s = s->next)
 	    {
 		DECOR_SCREEN (display->screens);
 
-		/* run decorator command if no decorator is present on
-		   first screen */
 		if (!ds->dmWin)
-		{
-		    if (fork () == 0)
-		    {
-			putenv (display->displayString);
-			execl ("/bin/sh", "/bin/sh", "-c", o->value.s, NULL);
-			exit (0);
-		    }
-		}
+		    runCommand (s, o->value.s);
 	    }
 
 	    return TRUE;

commit e9d33c05242f076f15b33322bfc9d33be631aecd
Author: Danny Baumann <dannybaumann@web.de>
Date:   Tue Oct 16 17:19:09 2007 +0200

    Use real screen number rather than 0.

diff --git a/kde/window-decorator/main.cpp b/kde/window-decorator/main.cpp
index 6adb2fd..e979973 100644
--- a/kde/window-decorator/main.cpp
+++ b/kde/window-decorator/main.cpp
@@ -92,7 +92,7 @@ main (int argc, char **argv)
 	return 1;
     }
 
-    status = decor_acquire_dm_session (qt_xdisplay (), 0, "kwd",
+    status = decor_acquire_dm_session (qt_xdisplay (), qt_xscreen (), "kwd",
 				       args->isSet ("replace"),
 				       &timestamp);
     if (status != DECOR_ACQUIRE_STATUS_SUCCESS)
@@ -102,7 +102,7 @@ main (int argc, char **argv)
 	    fprintf (stderr,
 		     "%s: Could not acquire decoration manager "
 		     "selection on screen %d display \"%s\"\n",
-		     argv[0], 0, DisplayString (qt_xdisplay ()));
+		     argv[0], qt_xscreen (), DisplayString (qt_xdisplay ()));
 	}
 	else if (status == DECOR_ACQUIRE_STATUS_OTHER_DM_RUNNING)
 	{
@@ -111,13 +111,13 @@ main (int argc, char **argv)
 		     "has a decoration manager; try using the "
 		     "--replace option to replace the current "
 		     "decoration manager.\n",
-		     argv[0], 0, DisplayString (qt_xdisplay ()));
+		     argv[0], qt_xscreen (), DisplayString (qt_xdisplay ()));
 	}
 
 	return 1;
     }
 
-    decor_set_dm_check_hint (qt_xdisplay (), 0);
+    decor_set_dm_check_hint (qt_xdisplay (), qt_xscreen ());
 
     if (!app->enableDecorations (timestamp, event))
     {

commit 8633239338fb3fa8466b460439d23b43d4bd9261
Author: Danny Baumann <dannybaumann@web.de>
Date:   Tue Oct 16 17:16:46 2007 +0200

    Use real screen number rather than 0.

diff --git a/gtk/window-decorator/gtk-window-decorator.c b/gtk/window-decorator/gtk-window-decorator.c
index c81adad..fb6762a 100644
--- a/gtk/window-decorator/gtk-window-decorator.c
+++ b/gtk/window-decorator/gtk-window-decorator.c
@@ -6823,8 +6823,9 @@ main (int argc, char *argv[])
     panel_action_run_dialog_atom =
 	XInternAtom (xdisplay, "_GNOME_PANEL_ACTION_RUN_DIALOG", FALSE);
 
-    status = decor_acquire_dm_session (xdisplay, 0, "gwd", replace,
-				       &dm_sn_timestamp);
+    status = decor_acquire_dm_session (xdisplay,
+				       gdk_screen_get_number (gdkscreen),
+				       "gwd", replace, &dm_sn_timestamp);
     if (status != DECOR_ACQUIRE_STATUS_SUCCESS)
     {
 	if (status == DECOR_ACQUIRE_STATUS_FAILED)
@@ -6832,7 +6833,8 @@ main (int argc, char *argv[])
 	    fprintf (stderr,
 		     "%s: Could not acquire decoration manager "
 		     "selection on screen %d display \"%s\"\n",
-		     program_name, 0, DisplayString (xdisplay));
+		     program_name, gdk_screen_get_number (gdkscreen),
+		     DisplayString (xdisplay));
 	}
 	else if (status == DECOR_ACQUIRE_STATUS_OTHER_DM_RUNNING)
 	{
@@ -6841,7 +6843,8 @@ main (int argc, char *argv[])
 		     "has a decoration manager; try using the "
 		     "--replace option to replace the current "
 		     "decoration manager.\n",
-		     program_name, 0, DisplayString (xdisplay));
+		     program_name, gdk_screen_get_number (gdkscreen),
+		     DisplayString (xdisplay));
 	}
 
 	return 1;
@@ -6888,7 +6891,7 @@ main (int argc, char *argv[])
 	return 1;
     }
 
-    decor_set_dm_check_hint (xdisplay, 0);
+    decor_set_dm_check_hint (xdisplay, gdk_screen_get_number (gdkscreen));
 
     update_default_decorations (gdkscreen);
 

commit 095e2dce32c08b9873a8d5491cc39a63399e576c
Author: Danny Baumann <dannybaumann@web.de>
Date:   Wed Oct 17 14:59:38 2007 +0200

    Fix in-viewport calculation.

diff --git a/plugins/place.c b/plugins/place.c
index 018c4ef..2f57608 100644
--- a/plugins/place.c
+++ b/plugins/place.c
@@ -1168,7 +1168,7 @@ placeWin (CompWindow *window,
 
 	    /* clip to screen if parent is visible in current viewport */
 	    if (parent->serverX < parent->screen->width &&
-		parent->serverX + parent->screen->width > 0)
+		parent->serverX + parent->serverWidth > 0)
 	    {
 		XRectangle area;
 

commit c5a70817911ba392f17deb45835c043f330b0f5f
Author: Danny Baumann <dannybaumann@web.de>
Date:   Wed Oct 17 12:24:20 2007 +0200

    Prevent wobbling when shading maximized windows.

diff --git a/plugins/wobbly.c b/plugins/wobbly.c
index 1f47fd5..163d114 100644
--- a/plugins/wobbly.c
+++ b/plugins/wobbly.c
@@ -2323,6 +2323,10 @@ wobblyWindowResizeNotify (CompWindow *w,
 
     if (ws->opt[WOBBLY_SCREEN_OPTION_MAXIMIZE_EFFECT].value.b &&
 	isWobblyWin (w)					      &&
+	/* prevent wobbling when shading maximized windows - assuming that
+	   the height difference shaded - non-shaded will hardly be -1 and
+	   a lack of wobbly animation in that corner case is tolerable */
+	(dheight != -1)                                       &&
 	((w->state | ww->state) & MAXIMIZE_STATE))
     {
 	ww->state &= ~MAXIMIZE_STATE;

commit 19876dff6e613d510f8b6e79649d1ce8b64027d9
Author: Danny Baumann <dannybaumann@web.de>
Date:   Wed Oct 17 08:40:49 2007 +0200

    Always allow focus for active window.

diff --git a/src/window.c b/src/window.c
index b72d6b3..b3c0edd 100644
--- a/src/window.c
+++ b/src/window.c
@@ -4569,6 +4569,9 @@ allowWindowFocus (CompWindow   *w,
     CompMatch   *match;
     int         vx, vy;
 
+    if (w->id == d->activeWindow)
+	return TRUE;
+
     /* do not focus windows of these types */
     if (w->type & noFocusMask)
 	return FALSE;

commit 1c9237b8f824ba9902b9ffb50d279553f9d73220
Author: Danny Baumann <dannybaumann@web.de>
Date:   Mon Oct 15 10:44:56 2007 +0200

    We have to send the WM_TAKE_FOCUS message even if we directly set the input focus.

diff --git a/src/window.c b/src/window.c
index ea22cd1..b72d6b3 100644
--- a/src/window.c
+++ b/src/window.c
@@ -2896,12 +2896,16 @@ moveInputFocusToWindow (CompWindow *w)
     }
     else
     {
+	Bool setFocus = FALSE;
+
 	if (w->inputHint)
 	{
 	    XSetInputFocus (d->display, w->id, RevertToPointerRoot,
 			    CurrentTime);
+	    setFocus = TRUE;
 	}
-	else if (w->protocols & CompWindowProtocolTakeFocusMask)
+
+	if (w->protocols & CompWindowProtocolTakeFocusMask)
 	{
 	    XEvent ev;
 
@@ -2917,8 +2921,11 @@ moveInputFocusToWindow (CompWindow *w)
 	    ev.xclient.data.l[4]    = 0;
 
 	    XSendEvent (d->display, w->id, FALSE, NoEventMask, &ev);
+
+	    setFocus = TRUE;
 	}
-	else if (!modalTransient)
+
+	if (!setFocus && !modalTransient)
 	{
 	    CompWindow *ancestor;
 

commit a02f570d9286305a2bf92257ed9e9479904c60fa
Author: Danny Baumann <dannybaumann@web.de>
Date:   Sat Oct 13 17:34:32 2007 +0200

    Clear all coordinates that match the server coordinates from the configure request mask to make sure a synthetic configure notify event is sent whenever needed.

diff --git a/src/window.c b/src/window.c
index 4eefa88..ea22cd1 100644



Reply to: