ecore-evas-wayland: commit on no-op configure events

this handles the case of a window configure not triggering any visible change

fix T5192
This commit is contained in:
Mike Blumenkrantz 2017-03-10 15:54:34 -05:00
parent 53c9a06c2d
commit 1b9970658f
1 changed files with 12 additions and 5 deletions

View File

@ -279,8 +279,8 @@ _ecore_evas_wl_common_cb_window_configure(void *data EINA_UNUSED, int type EINA_
Ecore_Evas *ee; Ecore_Evas *ee;
Ecore_Evas_Engine_Wl_Data *wdata; Ecore_Evas_Engine_Wl_Data *wdata;
Ecore_Wl2_Event_Window_Configure *ev; Ecore_Wl2_Event_Window_Configure *ev;
int nw = 0, nh = 0, fw, fh; int nw = 0, nh = 0, fw, fh, pfw, pfh;
Eina_Bool prev_max, prev_full; Eina_Bool prev_max, prev_full, state_change = EINA_FALSE;
LOGFN(__FILE__, __LINE__, __FUNCTION__); LOGFN(__FILE__, __LINE__, __FUNCTION__);
@ -302,18 +302,25 @@ _ecore_evas_wl_common_cb_window_configure(void *data EINA_UNUSED, int type EINA_
nw = ev->w; nw = ev->w;
nh = ev->h; nh = ev->h;
fw = wdata->win->geometry.w - wdata->content.w; pfw = fw = wdata->win->geometry.w - wdata->content.w;
fh = wdata->win->geometry.h - wdata->content.h; pfh = fh = wdata->win->geometry.h - wdata->content.h;
if ((prev_max != ee->prop.maximized) || if ((prev_max != ee->prop.maximized) ||
(prev_full != ee->prop.fullscreen)) (prev_full != ee->prop.fullscreen))
{ {
state_change = EINA_TRUE;
_ecore_evas_wl_common_state_update(ee); _ecore_evas_wl_common_state_update(ee);
fw = wdata->win->geometry.w - wdata->content.w; fw = wdata->win->geometry.w - wdata->content.w;
fh = wdata->win->geometry.h - wdata->content.h; fh = wdata->win->geometry.h - wdata->content.h;
} }
if ((!nw) && (!nh)) return ECORE_CALLBACK_RENEW; if ((!nw) && (!nh))
{
/* this assumes ecore-wl2 continues to immediately ack every configure */
if (wdata->win->surface && ((!state_change) || ((pfw == fw) && (pfh == fh))))
wl_surface_commit(wdata->win->surface);
return ECORE_CALLBACK_RENEW;
}
nw -= fw; nw -= fw;
nh -= fh; nh -= fh;