subtract x11 client damage region even when forcing full override damage

fix T2785
This commit is contained in:
Mike Blumenkrantz 2015-10-13 22:38:50 -04:00
parent f6be761226
commit 98c44950b1
1 changed files with 8 additions and 3 deletions

View File

@ -2804,19 +2804,24 @@ _e_comp_x_damage(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_Dam
E_Client *ec; E_Client *ec;
Ecore_X_Rectangle *rects = NULL; Ecore_X_Rectangle *rects = NULL;
int n = 0; int n = 0;
Eina_Bool skip = EINA_FALSE;
ec = _e_comp_x_client_find_by_damage(ev->damage); ec = _e_comp_x_client_find_by_damage(ev->damage);
if ((!ec) || e_object_is_del(E_OBJECT(ec))) return ECORE_CALLBACK_PASS_ON; if ((!ec) || e_object_is_del(E_OBJECT(ec))) return ECORE_CALLBACK_PASS_ON;
if (ec->override && (!_e_comp_x_client_data_get(ec)->first_damage)) if (ec->override && (!_e_comp_x_client_data_get(ec)->first_damage))
e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); {
else if (_e_comp_x_client_data_get(ec)->damage) e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h);
skip = EINA_TRUE;
}
if (_e_comp_x_client_data_get(ec)->damage)
{ {
Ecore_X_Region parts; Ecore_X_Region parts;
Ecore_X_Rectangle bounds; Ecore_X_Rectangle bounds;
parts = ecore_x_region_new(NULL, 0); parts = ecore_x_region_new(NULL, 0);
ecore_x_damage_subtract(_e_comp_x_client_data_get(ec)->damage, 0, parts); ecore_x_damage_subtract(_e_comp_x_client_data_get(ec)->damage, 0, parts);
rects = ecore_x_region_fetch(parts, &n, &bounds); if (!skip)
rects = ecore_x_region_fetch(parts, &n, &bounds);
ecore_x_region_free(parts); ecore_x_region_free(parts);
} }
//WRN("DAMAGE %p: %dx%d", ec, ev->area.width, ev->area.height); //WRN("DAMAGE %p: %dx%d", ec, ev->area.width, ev->area.height);