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
}
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,
++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
}