X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fframe.c;h=04dbe6e2b35cd32bcd80c534f3000092f330f930;hb=cf478381b3e386dc0478403cf1a73b4d3ec6fa61;hp=0b85245652065687e6765b07d1b9745285cbfaa7;hpb=d13daff9596c70cefa878efc901c9b877eda2d89;p=chaz%2Fopenbox diff --git a/openbox/frame.c b/openbox/frame.c index 0b852456..04dbe6e2 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -51,6 +51,7 @@ static void layout_title(ObFrame *self); static void set_theme_statics(ObFrame *self); static void free_theme_statics(ObFrame *self); static gboolean frame_animate_iconify(gpointer self); +static void frame_adjust_shape(ObFrame *self); static void frame_adjust_cursors(ObFrame *self); static void frame_get_offscreen_buffer(ObFrame *self); static void frame_free_offscreen_buffer(ObFrame *self); @@ -312,11 +313,6 @@ void frame_adjust_shape(ObFrame *self) ShapeBounding, 0, 0, xrect, num, ShapeUnion, Unsorted); } - - if (self->pixmap) - XShapeCombineShape(ob_display, self->pixmap, ShapeBounding, - 0, 0, self->window, ShapeBounding, ShapeSet); - #endif } @@ -790,9 +786,8 @@ void frame_adjust_area(ObFrame *self, gboolean moved, framerender_frame(self); frame_adjust_shape(self); - /* the offscreen buffer is invalid when the window is resized */ - if (self->visible) - frame_get_offscreen_buffer(self); + /* the offscreen buffer's shape needs to match */ + frame_get_offscreen_buffer(self); } if (!STRUT_EQUAL(self->size, oldsize)) { @@ -923,6 +918,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 +1752,15 @@ 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); + +#ifdef SHAPE + /* shape the offscreen buffer to match the window */ + XShapeCombineShape(ob_display, self->pixmap, ShapeBounding, + 0, 0, self->client->window, + ShapeBounding, ShapeSet); +#endif + /* self->picture = composite_create_picture(self->window, wattrib.visual,