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;
{
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)
return XCompositeNameWindowPixmap(ob_display, win);
}
+void composite_enable_for_window(Window win)
+{
+ /* Redirect window contents to offscreen pixmaps */
+ XCompositeRedirectWindow(ob_display, win, CompositeRedirectAutomatic);
+}
+
#endif
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);
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;
ShapeUnion, Unsorted);
}
- if (self->pixmap)
- XShapeCombineShape(ob_display, self->pixmap, ShapeBounding,
- 0, 0, self->window, ShapeBounding, ShapeSet);
-
#endif
}
/* 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
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,