add compiz and apropriate ebuilds with package.unmask file

This commit is contained in:
2012-01-25 22:04:41 +04:00
parent 2c8d5e4c01
commit 829d8ef4df
50 changed files with 2500 additions and 0 deletions

View File

@ -0,0 +1,41 @@
# compiz-start script
#
# hacky autodetection of neccessary options for XGL/AIGLX/NVIDIA
#
# Hanno Boeck, http://www.hboeck.de/
#
# Licensed under the same conditions as compiz itself (MIT or GPL)
if [ ! -x /usr/bin/glxinfo ]; then
echo "glxinfo not found, please install mesa-progs."
exit -1
fi
GLX_WITH_DIRECT=`glxinfo|grep -c GLX_EXT_texture_from_pixmap`
GLX_WITH_INDIRECT=`LIBGL_ALWAYS_INDIRECT=1 glxinfo|grep -c GLX_EXT_texture_from_pixmap`
GLX_RENDER=`glxinfo|grep -c "OpenGL renderer string: Mesa GLX Indirect"`
COMPIZ_OPTIONS="--replace"
if [ $GLX_WITH_DIRECT -eq 3 ]; then
if [ $GLX_RENDER -eq 0 ]; then
echo NVIDA detected
export __GL_YIELD="NOTHING"
else
echo XGL detected
fi
elif [ $GLX_WITH_INDIRECT -eq 3 ]; then
echo AIGLX detected
export LIBGL_ALWAYS_INDIRECT=1
fi
if [ ! -z $KDE_FULL_SESSION ] && [ -x /usr/bin/kde-window-decorator ]; then
echo Using KDE decorator
kde-window-decorator --replace &
else
echo Using GTK decorator
gtk-window-decorator --replace &
fi
compiz $COMPIZ_OPTIONS gconf move resize minimize place decoration wobbly fade cube rotate scale switcher zoom dbus

View File

@ -0,0 +1,29 @@
Index: compiz-0.6.2/src/screen.c
===================================================================
--- compiz-0.6.2.orig/src/screen.c
+++ compiz-0.6.2/src/screen.c
@@ -2244,7 +2244,8 @@ findTopLevelWindowAtScreen (CompScreen *
for (w = s->windows; w; w = w->next)
if (w->frame == id)
return w;
- }
+ } else if (w->resName && strstr(w->resName,"screensaver"))
+ return w;
return NULL;
}
Index: compiz-0.6.2/src/paint.c
===================================================================
--- compiz-0.6.2.orig/src/paint.c
+++ compiz-0.6.2/src/paint.c
@@ -211,7 +211,9 @@ paintOutputRegion (CompScreen *sc
if (count == 0 &&
!REGION_NOT_EMPTY (tmpRegion) &&
screen->opt[COMP_SCREEN_OPTION_UNREDIRECT_FS].value.b &&
- XEqualRegion (w->region, &screen->region))
+ XEqualRegion (w->region, &screen->region) &&
+ !(w->resName && strcmp(w->resName, "gnome-screensaver") == 0)
+ )
{
unredirectWindow (w);
fullscreenWindow = w;

View File

@ -0,0 +1,77 @@
diff -p -up compiz-0.7.8/configure.ac.framesvg compiz-0.7.8/configure.ac
--- compiz-0.7.8/configure.ac.framesvg 2008-11-20 15:58:43.000000000 +0100
+++ compiz-0.7.8/configure.ac 2008-11-20 16:34:25.000000000 +0100
@@ -487,7 +487,7 @@ if test "x$use_kde4" = "xyes"; then
kde4libs=`kde4-config --install lib --expandvars 2>/dev/null`
kde4incs=`kde4-config --install include --expandvars 2>/dev/null`
- kde4_test_includes="kdecoration.h kcommondecoration.h kdecorationbridge.h plasma/panelsvg.h"
+ kde4_test_includes="kdecoration.h kcommondecoration.h kdecorationbridge.h plasma/framesvg.h"
dnl Check for KWin headers
AC_MSG_CHECKING([for KWin headers])
diff -p -up compiz-0.7.8/kde/window-decorator-kde4/switcher.cpp.framesvg compiz-0.7.8/kde/window-decorator-kde4/switcher.cpp
--- compiz-0.7.8/kde/window-decorator-kde4/switcher.cpp.framesvg 2008-08-08 13:20:31.000000000 +0200
+++ compiz-0.7.8/kde/window-decorator-kde4/switcher.cpp 2008-11-20 16:38:10.000000000 +0100
@@ -30,7 +30,7 @@
#include <fixx11h.h>
-#include <KDE/Plasma/PanelSvg>
+#include <KDE/Plasma/FrameSvg>
#include <KDE/Plasma/Theme>
#include <kwindowsystem.h>
@@ -46,9 +46,9 @@ mId (id)
QColor color;
color = Plasma::Theme::defaultTheme ()->color (Plasma::Theme::TextColor);
- mBackground = new Plasma::PanelSvg();
+ mBackground = new Plasma::FrameSvg();
mBackground->setImagePath ("dialogs/background");
- mBackground->setEnabledBorders(Plasma::PanelSvg::AllBorders);
+ mBackground->setEnabledBorders(Plasma::FrameSvg::AllBorders);
mBorder.left = mBackground->marginSize(Plasma::LeftMargin);
mBorder.right = mBackground->marginSize(Plasma::RightMargin);
@@ -131,8 +131,8 @@ KWD::Switcher::redrawPixmap ()
p.setCompositionMode (QPainter::CompositionMode_Source);
p.setRenderHint (QPainter::SmoothPixmapTransform);
- mBackground->resizePanel (QSizeF (contentWidth, contentHeight));
- mBackground->paintPanel (&p, QRect (0, 0, contentWidth,
+ mBackground->resizeFrame (QSizeF (contentWidth, contentHeight));
+ mBackground->paintFrame (&p, QRect (0, 0, contentWidth,
contentHeight));
mBackgroundPixmap = mPixmap.copy (mBorder.left, mBorder.top,
@@ -168,7 +168,7 @@ KWD::Switcher::update ()
p.setCompositionMode (QPainter::CompositionMode_Source);
- mBackground->paintPanel (&p, QRect (mBorder.left, mBorder.top +
+ mBackground->paintFrame (&p, QRect (mBorder.left, mBorder.top +
mGeometry.height () + 5, mGeometry.width (),
fm.height ()));
diff -p -up compiz-0.7.8/kde/window-decorator-kde4/switcher.h.framesvg compiz-0.7.8/kde/window-decorator-kde4/switcher.h
--- compiz-0.7.8/kde/window-decorator-kde4/switcher.h.framesvg 2008-08-08 13:20:31.000000000 +0200
+++ compiz-0.7.8/kde/window-decorator-kde4/switcher.h 2008-11-20 16:36:22.000000000 +0100
@@ -30,7 +30,7 @@
namespace Plasma
{
-class PanelSvg;
+class FrameSvg;
}
class QSpacerItem;
@@ -70,7 +70,7 @@ class Switcher
QRect mGeometry;
- Plasma::PanelSvg *mBackground;
+ Plasma::FrameSvg *mBackground;
QPixmap mPixmap;
QPixmap mBackgroundPixmap;

View File

@ -0,0 +1,33 @@
Author: Romain Perier <mrpouet@gentoo.org>
Subject: Missing gconf flags for gnome plugin, fix bug #282807
Date: 2009-08-29 12:25
---
gtk/gnome/Makefile.am | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/gtk/gnome/Makefile.am b/gtk/gnome/Makefile.am
index 208318a..d0a7c54 100644
--- a/gtk/gnome/Makefile.am
+++ b/gtk/gnome/Makefile.am
@@ -2,7 +2,7 @@ moduledir = $(DESTDIR)$(windowsettingslibdir)/window-manager-settings
if USE_GNOME
libcompiz_la_LDFLAGS = -export-dynamic -avoid-version -rpath $(moduledir)
-libcompiz_la_LIBADD = @GNOME_WINDOW_SETTINGS_LIBS@
+libcompiz_la_LIBADD = @GNOME_WINDOW_SETTINGS_LIBS@ @GCONF_LIBS@
libcompiz_la_SOURCES = \
compiz-window-manager.c \
compiz-window-manager.h
@@ -76,8 +76,9 @@ if USE_GNOME_KEYBINDINGS
endif
endif
-INCLUDES = @GNOME_WINDOW_SETTINGS_CFLAGS@ \
- -DMETACITY_THEME_DIR=\""$(windowsettingsdatadir)/themes"\" \
+INCLUDES = @GNOME_WINDOW_SETTINGS_CFLAGS@ \
+ @GCONF_CFLAGS@ \
+ -DMETACITY_THEME_DIR=\""$(windowsettingsdatadir)/themes"\" \
-DLOCALEDIR="\"@datadir@/locale"\"
noinst_LTLIBRARIES = \

View File

@ -0,0 +1,82 @@
From 43c269a377e7b446fb1bb70732835b7395ce9524 Mon Sep 17 00:00:00 2001
From: Danny Baumann <dannybaumann@web.de>
Date: Mon, 25 Jan 2010 06:28:34 +0000
Subject: Fix crash on opening windows.
We must defer match evaluation until window initialization has finished
for all plugins as match evaluation means wrapped function calls.
---
diff --git a/plugins/obs.c b/plugins/obs.c
index a8d67f1..0f5b9d0 100644
--- a/plugins/obs.c
+++ b/plugins/obs.c
@@ -88,6 +88,8 @@ typedef struct _ObsWindow
{
int customFactor[MODIFIER_COUNT];
int matchFactor[MODIFIER_COUNT];
+
+ CompTimeoutHandle updateHandle;
} ObsWindow;
#define GET_OBS_DISPLAY(d) \
@@ -323,6 +325,22 @@ obsMatchPropertyChanged (CompDisplay *d,
WRAP (od, d, matchPropertyChanged, obsMatchPropertyChanged);
}
+static Bool
+obsUpdateWindow (void *closure)
+{
+ CompWindow *w = (CompWindow *) closure;
+ int i;
+
+ OBS_WINDOW (w);
+
+ for (i = 0; i < MODIFIER_COUNT; i++)
+ updatePaintModifier (w, i);
+
+ ow->updateHandle = 0;
+
+ return FALSE;
+}
+
static CompOption *
obsGetDisplayOptions (CompPlugin *p,
CompDisplay *display,
@@ -628,8 +646,8 @@ static CompBool
obsInitWindow (CompPlugin *p,
CompWindow *w)
{
- ObsWindow *ow;
- int i;
+ ObsWindow *ow;
+ int i;
OBS_SCREEN (w->screen);
@@ -643,10 +661,11 @@ obsInitWindow (CompPlugin *p,
ow->matchFactor[i] = 100;
}
- w->base.privates[os->windowPrivateIndex].ptr = ow;
+ /* defer initializing the factors from window matches as match evalution
+ means wrapped function calls */
+ ow->updateHandle = compAddTimeout (0, 0, obsUpdateWindow, w);
- for (i = 0; i < MODIFIER_COUNT; i++)
- updatePaintModifier (w, i);
+ w->base.privates[os->windowPrivateIndex].ptr = ow;
return TRUE;
}
@@ -657,6 +676,9 @@ obsFiniWindow (CompPlugin *p,
{
OBS_WINDOW (w);
+ if (ow->updateHandle)
+ compRemoveTimeout (ow->updateHandle);
+
free (ow);
}
--
cgit v0.8.2

View File

@ -0,0 +1,11 @@
--- compiz-0.8.4/gtk/window-decorator/gtk-window-decorator.c.old 2010-03-28 13:01:58.639940630 +0200
+++ compiz-0.8.4/gtk/window-decorator/gtk-window-decorator.c 2010-03-28 13:02:30.580354171 +0200
@@ -4233,7 +4233,7 @@
static void
hide_tooltip (void)
{
- if (GTK_WIDGET_VISIBLE (tip_window))
+ if (gtk_widget_get_visible (tip_window))
g_get_current_time (&tooltip_last_popdown);
gtk_widget_hide (tip_window);

View File

@ -0,0 +1,225 @@
From 04c6a44893a00088c63acd3ba327022f8aa551cc Mon Sep 17 00:00:00 2001
From: Dennis Kasprzyk <onestone@compiz-fusion.org>
Date: Fri, 12 Feb 2010 20:07:41 +0000
Subject: Kde 4.4 support.
---
diff --git a/kde/window-decorator-kde4/window.cpp b/kde/window-decorator-kde4/window.cpp
index a7cd2d4..99c502d 100644
--- a/kde/window-decorator-kde4/window.cpp
+++ b/kde/window-decorator-kde4/window.cpp
@@ -486,31 +486,39 @@ KWD::Window::showWindowMenu (const QRect &pos)
showWindowMenu (pos.bottomLeft ());
}
-void
-KWD::Window::processMousePressEvent (QMouseEvent *qme)
+KWD::Options::MouseCommand
+KWD::Window::buttonToCommand (Qt::MouseButtons button)
{
Options::MouseCommand com = Options::MouseNothing;
- bool active = isActive ();
+ bool active = isActive ();
if (!mSupportTakeFocus)
- active = TRUE;
+ active = true;
- switch (qme->button ()) {
+ switch (button) {
case Qt::LeftButton:
com = active ? Decorator::options ()->commandActiveTitlebar1 () :
- Decorator::options()->commandInactiveTitlebar1 ();
+ Decorator::options()->commandInactiveTitlebar1 ();
break;
case Qt::MidButton:
com = active ? Decorator::options ()->commandActiveTitlebar2 () :
- Decorator::options()->commandInactiveTitlebar2 ();
+ Decorator::options()->commandInactiveTitlebar2 ();
break;
case Qt::RightButton:
com = active ? Decorator::options ()->commandActiveTitlebar3 () :
- Decorator::options()->commandInactiveTitlebar3 ();
+ Decorator::options()->commandInactiveTitlebar3 ();
default:
break;
}
+ return com;
+}
+
+void
+KWD::Window::processMousePressEvent (QMouseEvent *qme)
+{
+ Options::MouseCommand com = buttonToCommand (qme->button ());
+
if (qme->button () == Qt::LeftButton)
{
// actions where it's not possible to get the matching release event
@@ -752,6 +760,96 @@ KWD::Window::compositingActive (void) const
return true;
}
+#if KDE_IS_VERSION(4,3,90)
+
+QRect
+KWD::Window::transparentRect () const
+{
+ return QRect ();
+}
+
+bool
+KWD::Window::isClientGroupActive ()
+{
+ return false;
+}
+
+QList<ClientGroupItem>
+KWD::Window::clientGroupItems () const
+{
+ QList<ClientGroupItem> items;
+
+ QIcon icon (mIcon);
+ icon.addPixmap (mMiniIcon);
+
+ items.append (ClientGroupItem (mName, icon));
+
+ return items;
+}
+
+long
+KWD::Window::itemId (int index)
+{
+ return (long) mClientId;
+}
+
+int
+KWD::Window::visibleClientGroupItem ()
+{
+ return 0;
+}
+
+void
+KWD::Window::setVisibleClientGroupItem (int index)
+{
+}
+
+void
+KWD::Window::moveItemInClientGroup (int index, int before)
+{
+}
+
+void
+KWD::Window::moveItemToClientGroup (long itemId, int before)
+{
+}
+
+void
+KWD::Window::removeFromClientGroup (int index, const QRect& newGeom)
+{
+}
+
+void
+KWD::Window::closeClientGroupItem (int index)
+{
+ closeWindow ();
+}
+
+void
+KWD::Window::closeAllInClientGroup ()
+{
+ closeWindow ();
+}
+
+void
+KWD::Window::displayClientMenu (int index, const QPoint& pos)
+{
+ showWindowMenu (pos);
+}
+
+KDecorationDefines::WindowOperation
+KWD::Window::buttonToWindowOperation(Qt::MouseButtons button)
+{
+ Options::MouseCommand com = buttonToCommand (button);
+
+ if (com == Options::MouseOperationsMenu)
+ return KDecorationDefines::OperationsOp;
+
+ return KDecorationDefines::NoOp;
+}
+
+#endif
+
void
KWD::Window::createDecoration (void)
{
@@ -1466,7 +1564,7 @@ KWD::Window::moveWindow (QMouseEvent *qme)
NET::Direction direction;
direction = positionToDirection (mDecor->mousePosition (qme->pos ()));
-
+
QPoint p (mGeometry.x () - mExtents.left, mGeometry.y () - mExtents.top);
p += qme->pos ();
@@ -1476,7 +1574,7 @@ KWD::Window::moveWindow (QMouseEvent *qme)
Decorator::rootInfo ()->restackRequest (mClientId, NET::FromApplication,
None, Above,
QX11Info::appTime());
-
+
Decorator::rootInfo ()->moveResizeRequest (mClientId,
p.x (),
p.y (),
diff --git a/kde/window-decorator-kde4/window.h b/kde/window-decorator-kde4/window.h
index 40a5076..c2b274b 100644
--- a/kde/window-decorator-kde4/window.h
+++ b/kde/window-decorator-kde4/window.h
@@ -26,6 +26,7 @@
#include <kdecorationbridge.h>
#include <KDE/KActionCollection>
+#include <kdeversion.h>
#include <qpixmap.h>
#include <qwidget.h>
@@ -111,7 +112,24 @@ class Window: public QObject, public KDecorationBridgeUnstable {
/* unstable API */
virtual bool compositingActive () const;
-
+#if KDE_IS_VERSION(4,3,90)
+ virtual QRect transparentRect () const;
+
+ virtual bool isClientGroupActive ();
+ virtual QList<ClientGroupItem> clientGroupItems () const;
+ virtual long itemId (int index);
+ virtual int visibleClientGroupItem ();
+ virtual void setVisibleClientGroupItem (int index);
+ virtual void moveItemInClientGroup (int index, int before);
+ virtual void moveItemToClientGroup (long itemId, int before);
+ virtual void removeFromClientGroup (int index, const QRect& newGeom);
+ virtual void closeClientGroupItem (int index);
+ virtual void closeAllInClientGroup ();
+ virtual void displayClientMenu (int index, const QPoint& pos);
+
+ virtual WindowOperation
+ buttonToWindowOperation(Qt::MouseButtons button);
+#endif
virtual bool eventFilter (QObject* o, QEvent* e);
void handleActiveChange (void);
@@ -191,8 +209,10 @@ class Window: public QObject, public KDecorationBridgeUnstable {
int rightOffset);
void updateProperty (void);
void getWindowProtocols (void);
+
+ Options::MouseCommand buttonToCommand (Qt::MouseButtons button);
void performMouseCommand (KWD::Options::MouseCommand command,
- QMouseEvent *qme);
+ QMouseEvent *qme);
NET::Direction positionToDirection (int pos);
Cursor positionToCursor (QPoint pos);
--
cgit v0.8.2

View File

@ -0,0 +1,30 @@
diff -uNr compiz-0.8.4.old/plugins/png.c compiz-0.8.4/plugins/png.c
--- compiz-0.8.4.old/plugins/png.c 2009-09-01 07:38:22.000000000 +0200
+++ compiz-0.8.4/plugins/png.c 2010-02-15 22:16:30.000000000 +0100
@@ -102,7 +102,7 @@
/* expand gray bit depth if needed */
if (color_type == PNG_COLOR_TYPE_GRAY && depth < 8)
- png_set_gray_1_2_4_to_8 (png);
+ png_set_expand_gray_1_2_4_to_8 (png);
/* transform transparency to alpha */
if (png_get_valid(png, info, PNG_INFO_tRNS))
@@ -167,7 +167,7 @@
Bool status;
sig_bytes = fread (png_sig, 1, PNG_SIG_SIZE, file);
- if (png_check_sig (png_sig, sig_bytes) == 0)
+ if (png_sig_cmp (png_sig, 0, sig_bytes) != 0)
return FALSE;
png = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
@@ -218,7 +218,7 @@
Bool status;
memcpy (png_sig, buffer, PNG_SIG_SIZE);
- if (png_check_sig (png_sig, PNG_SIG_SIZE) == 0)
+ if (png_sig_cmp (png_sig, 0, PNG_SIG_SIZE) != 0)
return FALSE;
png = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);

View File

@ -0,0 +1,103 @@
From db88fb6f3f6c0fa3c81bc04a2a3468252d49f098 Mon Sep 17 00:00:00 2001
From: Danny Baumann <dannybaumann@web.de>
Date: Sun, 31 Jan 2010 12:36:42 +0000
Subject: Fix handling of windows that have a server border set.
Also handle windows that have a server border set properly in pointer
(placement mode)
---
diff --git a/plugins/place.c b/plugins/place.c
index d59de33..a54e60a 100644
--- a/plugins/place.c
+++ b/plugins/place.c
@@ -131,12 +131,15 @@ typedef enum {
/* helper macros to get the full dimensions of a window,
including decorations */
+#define BORDER_WIDTH(w) ((w)->input.left + (w)->input.right + \
+ 2 * (w)->serverBorderWidth)
+#define BORDER_HEIGHT(w) ((w)->input.top + (w)->input.bottom + \
+ 2 * (w)->serverBorderWidth)
+
#define WIN_FULL_X(w) ((w)->serverX - (w)->input.left)
#define WIN_FULL_Y(w) ((w)->serverY - (w)->input.top)
-#define WIN_FULL_W(w) ((w)->serverWidth + 2 * (w)->serverBorderWidth + \
- (w)->input.left + (w)->input.right)
-#define WIN_FULL_H(w) ((w)->serverHeight + 2 * (w)->serverBorderWidth + \
- (w)->input.top + (w)->input.bottom)
+#define WIN_FULL_W(w) ((w)->serverWidth + BORDER_WIDTH (w))
+#define WIN_FULL_H(w) ((w)->serverHeight + BORDER_HEIGHT (w))
static Bool
placeMatchXYValue (CompWindow *w,
@@ -1216,8 +1219,8 @@ placeConstrainToWorkarea (CompWindow *w,
extents.left = *x - w->input.left;
extents.top = *y - w->input.top;
- extents.right = *x + w->serverWidth + w->input.right;
- extents.bottom = *y + w->serverHeight + w->input.bottom;
+ extents.right = extents.left + WIN_FULL_W (w);
+ extents.bottom = extents.top + WIN_FULL_H (w);
delta = workArea->x + workArea->width - extents.right;
if (delta < 0)
@@ -1419,9 +1422,9 @@ placeDoValidateWindowResizeRequest (CompWindow *w,
}
left = x - w->input.left;
- right = x + xwc->width + w->input.right;
+ right = left + xwc->width + BORDER_WIDTH (w);
top = y - w->input.top;
- bottom = y + xwc->height + w->input.bottom;
+ bottom = top + xwc->height + BORDER_HEIGHT (w);
output = outputDeviceForGeometry (s,
xwc->x, xwc->y,
@@ -1484,9 +1487,9 @@ placeDoValidateWindowResizeRequest (CompWindow *w,
/* bring left/right/top/bottom to actual window coordinates */
left += w->input.left;
- right -= w->input.right;
+ right -= w->input.right + 2 * w->serverBorderWidth;
top += w->input.top;
- bottom -= w->input.bottom;
+ bottom -= w->input.bottom + 2 * w->serverBorderWidth;
if ((right - left) != xwc->width)
{
@@ -1886,17 +1889,13 @@ placeDoHandleScreenSizeChange (CompScreen *s,
{
mask |= CWX | CWWidth;
xwc.x = vpX * s->width + workArea.x + w->input.left;
- xwc.width = workArea.width -
- (2 * w->serverBorderWidth +
- w->input.left + w->input.right);
+ xwc.width = workArea.width - BORDER_WIDTH (w);
}
if (w->state & CompWindowStateMaximizedVertMask)
{
mask |= CWY | CWHeight;
xwc.y = vpY * s->height + workArea.y + w->input.top;
- xwc.height = workArea.height -
- (2 * w->serverBorderWidth +
- w->input.top + w->input.bottom);
+ xwc.height = workArea.height - BORDER_HEIGHT (w);
}
}
}
--- a/plugins/place.c
+++ b/plugins/place.c
@@ -847,8 +847,8 @@ placePointer (CompWindow *w,
if (placeGetPointerPosition (w->screen, &xPointer, &yPointer))
{
- *x = xPointer - (w->serverWidth / 2);
- *y = yPointer - (w->serverHeight / 2);
+ *x = xPointer - (w->serverWidth / 2) - w->serverBorderWidth;
+ *y = yPointer - (w->serverHeight / 2) - w->serverBorderWidth;
}
else
{
--
cgit v0.8.2

View File

@ -0,0 +1,36 @@
From 79a275b240a98d9f64c8dd1e799e5d469ec8f204 Mon Sep 17 00:00:00 2001
From: Danny Baumann <dannybaumann@web.de>
Date: Wed, 20 Jan 2010 14:05:10 +0000
Subject: Fix window region calculation for windows that have border width set.
---
diff --git a/src/window.c b/src/window.c
index 90922d1..e7bb987 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1701,8 +1701,8 @@ updateWindowRegion (CompWindow *w)
{
r.x = -w->attrib.border_width;
r.y = -w->attrib.border_width;
- r.width = w->width;
- r.height = w->height;
+ r.width = w->attrib.width + w->attrib.border_width;
+ r.height = w->attrib.height + w->attrib.border_width;
rects = &r;
n = 1;
@@ -1719,8 +1719,10 @@ updateWindowRegion (CompWindow *w)
{
rect.extents.x1 = rects[i].x + w->attrib.border_width;
rect.extents.y1 = rects[i].y + w->attrib.border_width;
- rect.extents.x2 = rect.extents.x1 + rects[i].width;
- rect.extents.y2 = rect.extents.y1 + rects[i].height;
+ rect.extents.x2 = rect.extents.x1 + rects[i].width +
+ w->attrib.border_width;
+ rect.extents.y2 = rect.extents.y1 + rects[i].height +
+ w->attrib.border_width;
if (rect.extents.x1 < 0)
rect.extents.x1 = 0;
--
cgit v0.8.2

View File

@ -0,0 +1,101 @@
diff --git a/gtk/window-decorator/gtk-window-decorator.c b/gtk/window-decorator/gtk-window-decorator.c
index 18b907e..566da0f 100644
--- a/gtk/window-decorator/gtk-window-decorator.c
+++ b/gtk/window-decorator/gtk-window-decorator.c
@@ -31,6 +31,11 @@
#include <X11/extensions/Xrender.h>
#include <X11/Xregion.h>
+/* This must be included before the GDK_DISABLE_DEPRECATED definition
+ * in order to avoid QA issues on amd64 arch (see Gentoo bug 344293).
+ */
+#include <gdk/gdkgc.h>
+
#ifndef GDK_DISABLE_DEPRECATED
#define GDK_DISABLE_DEPRECATED
#endif
@@ -2659,6 +2664,7 @@ get_window_prop (Window xwindow,
Atom atom,
Window *val)
{
+ Display *dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
Atom type;
int format;
gulong nitems;
@@ -2671,7 +2677,7 @@ get_window_prop (Window xwindow,
gdk_error_trap_push ();
type = None;
- result = XGetWindowProperty (gdk_display,
+ result = XGetWindowProperty (dpy,
xwindow,
atom,
0, G_MAXLONG,
@@ -4966,7 +4972,7 @@ force_quit_dialog_realize (GtkWidget *dialog,
WnckWindow *win = data;
gdk_error_trap_push ();
- XSetTransientForHint (gdk_display,
+ XSetTransientForHint (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
GDK_WINDOW_XID (dialog->window),
wnck_window_get_xid (win));
gdk_display_sync (gdk_display_get_default ());
@@ -4976,17 +4982,18 @@ force_quit_dialog_realize (GtkWidget *dialog,
static char *
get_client_machine (Window xwindow)
{
- Atom atom, type;
- gulong nitems, bytes_after;
- guchar *str = NULL;
- int format, result;
- char *retval;
+ Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
+ Atom atom, type;
+ gulong nitems, bytes_after;
+ guchar *str = NULL;
+ int format, result;
+ char *retval;
- atom = XInternAtom (gdk_display, "WM_CLIENT_MACHINE", FALSE);
+ atom = XInternAtom (xdisplay, "WM_CLIENT_MACHINE", FALSE);
gdk_error_trap_push ();
- result = XGetWindowProperty (gdk_display,
+ result = XGetWindowProperty (xdisplay,
xwindow, atom,
0, G_MAXLONG,
FALSE, XA_STRING, &type, &format, &nitems,
@@ -5013,6 +5020,8 @@ get_client_machine (Window xwindow)
static void
kill_window (WnckWindow *win)
{
+ GdkDisplay *gdk_display = gdk_display_get_default ();
+ Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display);
WnckApplication *app;
app = wnck_window_get_application (win);
@@ -5038,8 +5047,8 @@ kill_window (WnckWindow *win)
}
gdk_error_trap_push ();
- XKillClient (gdk_display, wnck_window_get_xid (win));
- gdk_display_sync (gdk_display_get_default ());
+ XKillClient (xdisplay, wnck_window_get_xid (win));
+ gdk_display_sync (gdk_display);
gdk_error_trap_pop ();
}
@@ -5623,9 +5632,9 @@ static int
update_shadow (void)
{
decor_shadow_options_t opt;
- Display *xdisplay = gdk_display;
- GdkDisplay *display = gdk_display_get_default ();
- GdkScreen *screen = gdk_display_get_default_screen (display);
+ GdkDisplay *display = gdk_display_get_default ();
+ Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
+ GdkScreen *screen = gdk_display_get_default_screen (display);
opt.shadow_radius = shadow_radius;
opt.shadow_opacity = shadow_opacity;

View File

@ -0,0 +1,23 @@
From 0f95c41a0aa175ddf7947ba18b01f746c95594a9 Mon Sep 17 00:00:00 2001
From: Paul Donohue <compiz@paulsd.com>
Date: Sun, 17 Oct 2010 16:24:14 +0000
Subject: Fix pixmap size calculation, server drawn borders are also included in
the pixmap.
---
diff --git a/src/window.c b/src/window.c
index a925288..6674643 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1446,8 +1446,8 @@ bindWindow (CompWindow *w)
}
w->pixmap = XCompositeNameWindowPixmap (dpy, w->id);
- w->width = attr.width;
- w->height = attr.height;
+ w->width = attr.width + attr.border_width * 2;
+ w->height = attr.height + attr.border_width * 2;
XUngrabServer (dpy);
}
--
cgit v0.8.3.1-30-gff3a

View File

@ -0,0 +1,384 @@
#!/bin/sh
# Compiz Manager wrapper script
#
# Copyright (c) 2007 Kristian Lyngstøl <kristian@bohemians.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
#
# Contributions by: Treviño (3v1n0) <trevi55@gmail.com>, Ubuntu Packages
#
# Much of this code is based on Beryl code, also licensed under the GPL.
# This script will detect what options we need to pass to compiz to get it
# started, and start a default plugin and possibly window decorator.
#
COMPIZ_BIN_PATH="/usr/bin/" # For window decorators and compiz
PLUGIN_PATH="/usr/lib/compiz/"
GLXINFO="/usr/bin/glxinfo"
KWIN="/usr/bin/kwin"
METACITY="/usr/bin/metacity"
COMPIZ_NAME="compiz" # Final name for compiz (compiz.real)
# For Xgl LD_PRELOAD
LIBGL_NVIDIA="/usr/lib/nvidia/libGL.so.1.2.xlibmesa"
LIBGL_FGLRX="/usr/lib/fglrx/libGL.so.1.2.xlibmesa"
# Minimum amount of memory (in kilo bytes) that nVidia cards need
# to be allowed to start
# Set to 262144 to require 256MB
NVIDIA_MEMORY="65536" # 64MB
NVIDIA_SETTINGS="nvidia-settings" # Assume it's in the path by default
# For detecting what driver is in use, the + is for one or more /'s
XORG_DRIVER_PATH="/usr/lib/xorg/modules/drivers/+"
FALLBACKWM="${METACITY}"
FALLBACKWM_OPTIONS="--replace $@"
# Driver whitelist
WHITELIST="nvidia intel ati radeon i810"
# blacklist based on the pci ids
# See http://wiki.compiz-fusion.org/Hardware/Blacklist for details
T=" 1002:5954 1002:5854 1002:5955" # ati rs480
T="$T 1002:4153" # ATI Rv350
T="$T 8086:2982 8086:2992 8086:29a2 8086:2a02 8086:2a12" # intel 965
BLACKLIST_PCIIDS="$T"
unset T
COMPIZ_OPTIONS="--ignore-desktop-hints --replace"
COMPIZ_PLUGINS=""
ENV=""
# Use emerald by default if it exist
USE_EMERALD="yes"
# No indirect by default
INDIRECT="no"
# Default X.org log if xset q doesn't reveal it
XORG_DEFAULT_LOG="/var/log/Xorg.0.log"
# Set to yes to enable verbose
VERBOSE="yes"
# Echos the arguments if verbose
verbose()
{
if [ "x$VERBOSE" = "xyes" ]; then
printf "$*"
fi
}
# abort script and run fallback windowmanager
abort_with_fallback_wm()
{
if [ "x$SKIP_CHECKS" = "xyes" ]; then
verbose "SKIP_CHECKS is yes, so continuing despite problems.\n"
return 0;
fi
verbose "aborting and using fallback: $FALLBACKWM \n"
if [ -x $FALLBACKWM ]; then
exec $FALLBACKWM $FALLBACKWM_OPTIONS
else
printf "no $FALLBACKWM found, exiting\n"
exit 1
fi
}
# Check for non power of two texture support
check_npot_texture()
{
verbose "Checking for non power of two support: "
if glxinfo 2> /dev/null | egrep -q '(GL_ARB_texture_non_power_of_two|GL_NV_texture_rectangle|GL_EXT_texture_rectangle|GL_ARB_texture_rectangle)' ; then
verbose "present. \n";
return 0;
else
verbose "Not present. \n"
return 1;
fi
}
# Check for presence of FBConfig
check_fbconfig()
{
verbose "Checking for FBConfig: "
if [ "$INDIRECT" = "yes" ]; then
$GLXINFO -i | grep -q GLX.*fbconfig
FB=$?
else
$GLXINFO | grep -q GLX.*fbconfig
FB=$?
fi
if [ $FB = "0" ]; then
unset FB
verbose "present. \n"
return 0;
else
unset FB
verbose "not present. \n"
return 1;
fi
}
# Check for TFP
check_tfp()
{
verbose "Checking for texture_from_pixmap: "
if [ $($GLXINFO 2>/dev/null | grep GLX_EXT_texture_from_pixmap -c) -gt 2 ] ; then
verbose "present. \n"
return 0;
else
verbose "not present. \n"
if [ "$INDIRECT" = "yes" ]; then
unset LIBGL_ALWAYS_INDIRECT
INDIRECT="no"
return 1;
else
verbose "Trying again with indirect rendering:\n";
INDIRECT="yes"
export LIBGL_ALWAYS_INDIRECT=1
check_tfp;
return $?
fi
fi
}
# Check wether the composite extension is present
check_composite()
{
verbose "Checking for Composite extension: "
if xdpyinfo -queryExtensions | grep -q Composite ; then
verbose "present. \n";
return 0;
else
verbose "not present. \n";
return 1;
fi
}
# Detects if Xgl is running
check_xgl()
{
verbose "Checking for Xgl: "
if xvinfo | grep -q Xgl ; then
verbose "present. \n"
return 0;
else
verbose "not present. \n"
return 1;
fi
}
# Check if the nVidia card has enough video ram to make sense
check_nvidia_memory()
{
MEM=$(${NVIDIA_SETTINGS} -q VideoRam | egrep Attribute\ \'VideoRam\'\ .*: | cut -d: -f3 | sed 's/[^0-9]//g')
if [ $MEM -lt $NVIDIA_MEMORY ]; then
verbose "Less than ${NVIDIA_MEMORY}kb of memory and nVidia";
return 1;
fi
return 0;
}
# Check for existence if NV-GLX
check_nvidia()
{
if [ ! -z $NVIDIA_INTERNAL_TEST ]; then
return $NVIDIA_INTERNAL_TEST;
fi
verbose "Checking for nVidia: "
if xdpyinfo | grep -q NV-GLX ; then
verbose "present. \n"
NVIDIA_INTERNAL_TEST=0
return 0;
else
verbose "not present. \n"
NVIDIA_INTERNAL_TEST=1
return 1;
fi
}
# Check if the max texture size is large enough compared to the resolution
check_texture_size()
{
TEXTURE_LIMIT=$(glxinfo -l | grep -m1 GL_MAX_TEXTURE_SIZE | sed 's/.*=[^0-9]//g')
RESOLUTION=$(xdpyinfo | grep -i dimensions: | sed 's/[^0-9]*pixels.*(.*).*//' | sed 's/[^0-9x]*//')
VRES=$(echo $RESOLUTION | sed 's/.*x//')
HRES=$(echo $RESOLUTION | sed 's/x.*//')
verbose "Comparing resolution ($RESOLUTION) to maximum 3D texture size ($TEXTURE_LIMIT): ";
if [ $VRES -gt $TEXTURE_LIMIT ] || [ $HRES -gt $TEXTURE_LIMIT ]; then
verbose "Failed.\n"
return 1;
fi
verbose "Passed.\n"
return 0
}
# check driver whitelist
running_under_whitelisted_driver()
{
LOG=$(xset q|grep "Log file"|awk '{print $3}')
if [ "$LOG" = "" ]; then
verbose "xset q doesn't reveal the location of the log file. Using fallback $XORG_DEFAULT_LOG \n"
LOG=$XORG_DEFAULT_LOG;
fi
if [ -z "$LOG" ];then
verbose "AIEEEEH, no Log file found \n"
verbose "$(xset q) \n"
return 0
fi
for DRV in ${WHITELIST}; do
if egrep -q "Loading ${XORG_DRIVER_PATH}${DRV}_drv\.so" $LOG &&
! egrep -q "Unloading ${XORG_DRIVER_PATH}${DRV}_drv\.so" $LOG;
then
return 0
fi
done
verbose "No whitelisted driver found\n"
return 1
}
# check pciid blacklist
have_blacklisted_pciid()
{
OUTPUT=$(lspci -n)
for ID in ${BLACKLIST_PCIIDS}; do
if echo "$OUTPUT" | egrep -q "$ID"; then
verbose "Blacklisted PCIID '$ID' found \n"
return 0
fi
done
OUTPUT=$(lspci -vn | grep -i VGA)
verbose "Detected PCI ID for VGA: $OUTPUT\n"
return 1
}
build_env()
{
if check_nvidia; then
ENV="__GL_YIELD=NOTHING "
fi
if [ "$INDIRECT" = "yes" ]; then
ENV="$ENV LIBGL_ALWAYS_INDIRECT=1 "
fi
if check_xgl; then
if [ -f ${LIBGL_NVIDIA} ]; then
ENV="$ENV LD_PRELOAD=${LIBGL_NVIDIA}"
verbose "Enabling Xgl with nVidia drivers...\n"
fi
if [ -f ${LIBGL_FGLRX} ]; then
ENV="$ENV LD_PRELOAD=${LIBGL_FGLRX}"
verbose "Enabling Xgl with fglrx ATi drivers...\n"
fi
fi
ENV="$ENV FROM_WRAPPER=yes"
if [ -n "$ENV" ]; then
export $ENV
fi
}
build_args()
{
if [ $INDIRECT = "yes" ]; then
COMPIZ_OPTIONS="$COMPIZ_OPTIONS --indirect-rendering "
fi
if check_nvidia; then
COMPIZ_OPTIONS="$COMPIZ_OPTIONS --loose-binding"
fi
}
####################
# Execution begins here.
# Read configuration from XDG paths
if [ -z "$XDG_CONFIG_DIRS" ]; then
test -f /etc/xdg/compiz/compiz-manager && . /etc/xdg/compiz/compiz-manager
else
test -f $XDG_CONFIG_DIRS/compiz/compiz-manager && . $XDG_CONFIG_DIRS/compiz/compiz-manager
fi
if [ -z "$XDG_CONFIG_HOME" ]; then
test -f $HOME/.config/compiz/compiz-manager && . $HOME/.config/compiz/compiz-manager
else
test -f $XDG_CONFIG_HOME/compiz/compiz-manager && . $XDG_CONFIG_HOME/compiz/compiz-manager
fi
# Don't use compiz when running the failsafe session
if [ "x$GNOME_DESKTOP_SESSION_ID" = "xFailsafe" ]; then
abort_with_fallback_wm
fi
if [ "x$LIBGL_ALWAYS_INDIRECT" = "x1" ]; then
INDIRECT="yes";
fi
# if we run under Xgl, we can skip some tests here
if ! check_xgl; then
# if vesa or vga are in use, do not even try glxinfo (LP#119341)
if ! running_under_whitelisted_driver || have_blacklisted_pciid; then
abort_with_fallback_wm
fi
# check if we have the required bits to run compiz and if not,
# fallback
if ! check_tfp || ! check_npot_texture || ! check_composite || ! check_texture_size; then
abort_with_fallback_wm
fi
if check_nvidia && ! check_nvidia_memory; then
abort_with_fallback_wm
fi
if ! check_fbconfig; then
abort_with_fallback_wm
fi
fi
# load the ccp plugin if present and fallback to plain gconf if not
if [ -f ${PLUGIN_PATH}libccp.so ]; then
COMPIZ_PLUGINS="$COMPIZ_PLUGINS ccp"
elif [ -f ${PLUGIN_PATH}libgconf.so ]; then
COMPIZ_PLUGINS="$COMPIZ_PLUGINS glib gconf"
fi
# get environment
build_env
build_args
# start the gtk-window-decorator if present
if [ -x ${COMPIZ_BIN_PATH}emerald ] && [ "$USE_EMERALD" = "yes" ]; then
verbose "Starting emerald\n"
${COMPIZ_BIN_PATH}emerald --replace &
elif [ -x ${COMPIZ_BIN_PATH}gtk-window-decorator ] && [ -n "$GNOME_DESKTOP_SESSION_ID" ]; then
verbose "Starting gtk-window-decorator\n"
${COMPIZ_BIN_PATH}gtk-window-decorator --replace &
elif [ -x ${COMPIZ_BIN_PATH}kde-window-decorator ] && [ -n "$KDE_FULL_SESSION" ]; then
verbose "Starting kde-window-decorator\n"
${COMPIZ_BIN_PATH}kde-window-decorator --replace &
FALLBACKWM="${KWIN}"
fi
${COMPIZ_BIN_PATH}${COMPIZ_NAME} $COMPIZ_OPTIONS "$@" $COMPIZ_PLUGINS || exec $FALLBACKWM $FALLBACKWM_OPTIONS

View File

@ -0,0 +1,20 @@
configure.ac | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index 7b09153..9c22ea0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -192,10 +192,10 @@ if test "x$use_gconf" = "xyes"; then
if test x"$GCONFTOOL" = xno; then
AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])
fi
+else
+ AM_CONDITIONAL(GCONF_SCHEMAS_INSTALL, test "x$use_gconf" = "xyes")
fi
-AM_GCONF_SOURCE_2
-
AM_CONDITIONAL(USE_GCONF, test "x$use_gconf" = "xyes")
if test "$use_gconf" = yes; then
AC_DEFINE(USE_GCONF, 1, [Build gconf plugin])

View File

@ -0,0 +1,12 @@
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=Compiz
Name[en_GB]=Compiz
Exec=compiz ccp
NoDisplay=true
# name we put on the WM spec check window
X-GNOME-WMName=Compiz
X-GNOME-Autostart-Phase=WindowManager
X-GNOME-Provides=windowmanager
X-GNOME-Autostart-Notify=true