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; }
|
gboolean composite_window_has_alpha(Visual *vis) { return FALSE; }
|
||||||
XID composite_get_window_picture(Window win, Visual *vis) { return None; }
|
XID composite_get_window_picture(Window win, Visual *vis) { return None; }
|
||||||
Pixmap composite_get_window_pixmap(Window win) { return None; }
|
Pixmap composite_get_window_pixmap(Window win) { return None; }
|
||||||
|
void composite_setup_root_window() {}
|
||||||
|
void composite_enable_for_window(Window win) {}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static Picture root_picture = None;
|
static Picture root_picture = None;
|
||||||
|
@ -16,13 +18,6 @@ void composite_startup(gboolean reconfig)
|
||||||
{
|
{
|
||||||
if (reconfig) return;
|
if (reconfig) return;
|
||||||
if (!extensions_comp) 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)
|
void composite_shutdown(gboolean reconfig)
|
||||||
|
@ -71,4 +66,10 @@ Pixmap composite_get_window_pixmap(Window win)
|
||||||
return XCompositeNameWindowPixmap(ob_display, 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
|
#endif
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
void composite_startup(gboolean reconfig);
|
void composite_startup(gboolean reconfig);
|
||||||
void composite_shutdown(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);
|
gboolean composite_window_has_alpha(Visual *vis);
|
||||||
XID composite_get_window_picture(Window win, Visual *vis);
|
XID composite_get_window_picture(Window win, Visual *vis);
|
||||||
Pixmap composite_get_window_pixmap(Window win);
|
Pixmap composite_get_window_pixmap(Window win);
|
||||||
|
|
|
@ -288,6 +288,12 @@ void frame_adjust_shape(ObFrame *self)
|
||||||
self->client->window,
|
self->client->window,
|
||||||
ShapeBounding, ShapeSet);
|
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;
|
num = 0;
|
||||||
if (self->decorations & OB_FRAME_DECOR_TITLEBAR) {
|
if (self->decorations & OB_FRAME_DECOR_TITLEBAR) {
|
||||||
xrect[0].x = 0;
|
xrect[0].x = 0;
|
||||||
|
@ -313,10 +319,6 @@ void frame_adjust_shape(ObFrame *self)
|
||||||
ShapeUnion, Unsorted);
|
ShapeUnion, Unsorted);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->pixmap)
|
|
||||||
XShapeCombineShape(ob_display, self->pixmap, ShapeBounding,
|
|
||||||
0, 0, self->window, ShapeBounding, ShapeSet);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -923,6 +925,9 @@ void frame_grab_client(ObFrame *self)
|
||||||
/* reparent the client to the frame */
|
/* reparent the client to the frame */
|
||||||
XReparentWindow(ob_display, self->client->window, self->window, 0, 0);
|
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
|
When reparenting the client window, it is usually not mapped yet, since
|
||||||
this occurs from a MapRequest. However, in the case where Openbox is
|
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);
|
frame_free_offscreen_buffer(self);
|
||||||
|
|
||||||
if (self->visible || frame_iconify_animating(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,
|
self->picture = composite_create_picture(self->window,
|
||||||
wattrib.visual,
|
wattrib.visual,
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "moveresize.h"
|
#include "moveresize.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
|
#include "composite.h"
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "session.h"
|
#include "session.h"
|
||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
|
|
Loading…
Reference in a new issue