From: Mikael Magnusson Date: Thu, 29 Jan 2009 21:45:47 +0000 (+0100) Subject: Merge branch 'backport' into work X-Git-Tag: mikabox-3.5-7~420 X-Git-Url: http://git.openbox.org/?p=mikachu%2Fopenbox.git;a=commitdiff_plain;h=4145468a1984e1055a947ad957075ae51f70ca9c Merge branch 'backport' into work Conflicts: openbox/event.c openbox/frame.c --- 4145468a1984e1055a947ad957075ae51f70ca9c diff --cc openbox/event.c index 30bc656,8eb612a..f69267d --- a/openbox/event.c +++ b/openbox/event.c @@@ -1576,11 -1567,22 +1576,24 @@@ static void event_handle_client(ObClien default: ; #ifdef SHAPE - if (obt_display_extension_shape && - e->type == obt_display_extension_shape_basep) { - client->shaped = ((XShapeEvent*)e)->shaped; - frame_adjust_shape(client->frame); + int kind; - if (extensions_shape && e->type == extensions_shape_event_basep) { ++ if (obt_display_extension_shape && ++ e->type == obt_display_extension_shape_basep) ++ { + switch (((XShapeEvent*)e)->kind) { + case ShapeBounding: + case ShapeClip: + client->shaped = ((XShapeEvent*)e)->shaped; + kind = ShapeBounding; + break; + case ShapeInput: + client->shaped_input = ((XShapeEvent*)e)->shaped; + kind = ShapeInput; + break; + } + frame_adjust_shape_kind(client->frame, kind); + } } #endif } diff --cc openbox/frame.c index 30630fb,5e60d11..c633fa6 --- a/openbox/frame.c +++ b/openbox/frame.c @@@ -271,15 -273,16 +271,16 @@@ void frame_adjust_shape_kind(ObFrame *s gint num; XRectangle xrect[2]; - if (!self->client->shaped) { + if (!((kind == ShapeBounding && self->client->shaped) || + (kind == ShapeInput && self->client->shaped_input))) { /* clear the shape on the frame window */ - XShapeCombineMask(obt_display, self->window, ShapeBounding, - XShapeCombineMask(ob_display, self->window, kind, ++ XShapeCombineMask(obt_display, self->window, kind, self->size.left, self->size.top, None, ShapeSet); } else { /* make the frame's shape match the clients */ - XShapeCombineShape(obt_display, self->window, ShapeBounding, - XShapeCombineShape(ob_display, self->window, kind, ++ XShapeCombineShape(obt_display, self->window, kind, self->size.left, self->size.top, self->client->window, @@@ -305,10 -308,18 +306,18 @@@ ++num; } - XShapeCombineRectangles(ob_display, self->window, - kind, 0, 0, xrect, num, + XShapeCombineRectangles(obt_display, self->window, + ShapeBounding, 0, 0, xrect, num, ShapeUnion, Unsorted); } + } + #endif + + void frame_adjust_shape(ObFrame *self) + { + #ifdef SHAPE + frame_adjust_shape_kind(self, ShapeBounding); + frame_adjust_shape_kind(self, ShapeInput); #endif }