ec->need_shape_merge = 1;
}
else
- ec->changes.shape = 1;
+ {
+ if ((ec->comp_data->shape.x != ev->x) ||
+ (ec->comp_data->shape.y != ev->y) ||
+ (ec->comp_data->shape.w != ev->w) ||
+ (ec->comp_data->shape.h != ev->h))
+ {
+ /* bounding box changed, need export for rendering */
+ EINA_RECTANGLE_SET(&ec->comp_data->shape, ev->x, ev->y, ev->w, ev->h);
+ ec->need_shape_export = 1;
+ }
+ ec->changes.shape = 1;
+ }
}
else if (ec->shaped) //shape change on parent window only valid if window is known to be shaped
ec->need_shape_export = 1;
+ if (ec->changes.shape)
+ {
+ if (ev->type == ECORE_X_SHAPE_BOUNDING)
+ e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h);
+ }
EC_CHANGED(ec);
return ECORE_CALLBACK_PASS_ON;
}
ec->shape_rects = (Eina_Rectangle*)rects;
ec->shape_rects_num = num;
ec->shape_changed = 1;
+ e_comp_shape_queue(ec->comp);
}
else
free(rects);
Ecore_X_Visual vis; // window visual
Ecore_X_Colormap cmap; // colormap of window
int pw, ph; //XPRESENT!
+ Eina_Rectangle shape; //SHAPE
#if 0 //NOT USED
Ecore_X_Pixmap cache_pixmap; // the cached pixmap (1/nth the dimensions)