summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-06-21 05:49:08 +0000
committerDana Jansens <danakj@orodu.net>2007-06-21 05:49:08 +0000
commit15cabcb16a188912f49e99885896ed7ad7a13925 (patch)
treeb7decc45d6bdbe23f367c7a3867349bb7714a902 /openbox
parent4c5034aaebc560e1c18af597009577b842081df9 (diff)
only enable automatic composite redirection for the client windows, not the frames. maybe this will avoid screen artifacts with the crap server support
Diffstat (limited to 'openbox')
-rw-r--r--openbox/composite.c15
-rw-r--r--openbox/composite.h3
-rw-r--r--openbox/frame.c15
-rw-r--r--openbox/screen.c1
4 files changed, 22 insertions, 12 deletions
diff --git a/openbox/composite.c b/openbox/composite.c
index 93c025ff..deedf965 100644
--- a/openbox/composite.c
+++ b/openbox/composite.c
@@ -8,6 +8,8 @@ void composite_shutdown(gboolean reconfig) {}
gboolean composite_window_has_alpha(Visual *vis) { return FALSE; }
XID composite_get_window_picture(Window win, Visual *vis) { return None; }
Pixmap composite_get_window_pixmap(Window win) { return None; }
+void composite_setup_root_window() {}
+void composite_enable_for_window(Window win) {}
#else
static Picture root_picture = None;
@@ -16,13 +18,6 @@ void composite_startup(gboolean reconfig)
{
if (reconfig) return;
if (!extensions_comp) return;
-
- /* Redirect window contents to offscreen pixmaps */
-/*
- XCompositeRedirectSubwindows(ob_display,
- RootWindow(ob_display, ob_screen),
- CompositeRedirectAutomatic);
-*/
}
void composite_shutdown(gboolean reconfig)
@@ -71,4 +66,10 @@ Pixmap composite_get_window_pixmap(Window win)
return XCompositeNameWindowPixmap(ob_display, win);
}
+void composite_enable_for_window(Window win)
+{
+ /* Redirect window contents to offscreen pixmaps */
+ XCompositeRedirectWindow(ob_display, win, CompositeRedirectAutomatic);
+}
+
#endif
diff --git a/openbox/composite.h b/openbox/composite.h
index 94232ffa..d20abacb 100644
--- a/openbox/composite.h
+++ b/openbox/composite.h
@@ -7,6 +7,9 @@
void composite_startup(gboolean reconfig);
void composite_shutdown(gboolean reconfig);
+void composite_setup_root_window();
+void composite_enable_for_window(Window win);
+
gboolean composite_window_has_alpha(Visual *vis);
XID composite_get_window_picture(Window win, Visual *vis);
Pixmap composite_get_window_pixmap(Window win);
diff --git a/openbox/frame.c b/openbox/frame.c
index 0b852456..25a9214b 100644
--- a/openbox/frame.c
+++ b/openbox/frame.c
@@ -288,6 +288,12 @@ void frame_adjust_shape(ObFrame *self)
self->client->window,
ShapeBounding, ShapeSet);
+ /* shape the offscreen buffer to match the window */
+ if (self->pixmap)
+ XShapeCombineShape(ob_display, self->pixmap, ShapeBounding,
+ 0, 0, self->client->window,
+ ShapeBounding, ShapeSet);
+
num = 0;
if (self->decorations & OB_FRAME_DECOR_TITLEBAR) {
xrect[0].x = 0;
@@ -313,10 +319,6 @@ void frame_adjust_shape(ObFrame *self)
ShapeUnion, Unsorted);
}
- if (self->pixmap)
- XShapeCombineShape(ob_display, self->pixmap, ShapeBounding,
- 0, 0, self->window, ShapeBounding, ShapeSet);
-
#endif
}
@@ -923,6 +925,9 @@ void frame_grab_client(ObFrame *self)
/* reparent the client to the frame */
XReparentWindow(ob_display, self->client->window, self->window, 0, 0);
+ /* enable the offscreen composite buffer for the client window */
+ composite_enable_for_window(self->client->window);
+
/*
When reparenting the client window, it is usually not mapped yet, since
this occurs from a MapRequest. However, in the case where Openbox is
@@ -1754,7 +1759,7 @@ static void frame_get_offscreen_buffer(ObFrame *self)
frame_free_offscreen_buffer(self);
if (self->visible || frame_iconify_animating(self)) {
- self->pixmap = composite_get_window_pixmap(self->window);
+ self->pixmap = composite_get_window_pixmap(self->client->window);
/*
self->picture = composite_create_picture(self->window,
wattrib.visual,
diff --git a/openbox/screen.c b/openbox/screen.c
index 4abf5b6c..7e02bff4 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -27,6 +27,7 @@
#include "moveresize.h"
#include "config.h"
#include "screen.h"
+#include "composite.h"
#include "client.h"
#include "session.h"
#include "frame.h"