only enable automatic composite redirection for the client windows, not the frames. maybe this will avoid screen artifacts with the crap server support
This commit is contained in:
parent
4c5034aaeb
commit
15cabcb16a
4 changed files with 22 additions and 12 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue