jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=a2a28a5658aa7c752180d48869f2d9c1408439fb
commit a2a28a5658aa7c752180d48869f2d9c1408439fb Author: Jean-Philippe Andre <[email protected]> Date: Thu Dec 1 13:21:49 2016 +0900 win: Force opaque region updates on alpha change What happens is that ecore_wl2 ignores calls to opaque_region_set if the window has alpha. As a consequence the opaque_region is not updated server-side and the previous window geometry is kept as opaque region, even though the window should have alpha. Thanks @raster for the report. --- src/lib/elementary/efl_ui_win.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 0e971c7..bab64e6 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -338,6 +338,7 @@ static void _elm_win_frame_add(Efl_Ui_Win_Data *sd, const char *style); static void _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, Eina_Bool calc); static inline void _elm_win_need_frame_adjust(Efl_Ui_Win_Data *sd, const char *engine); static void _elm_win_resize_objects_eval(Evas_Object *obj); +static void _elm_win_opaque_update(Efl_Ui_Win_Data *sd, Eina_Bool force_alpha); #ifdef HAVE_ELEMENTARY_X static void _elm_win_xwin_update(Efl_Ui_Win_Data *sd); @@ -412,6 +413,7 @@ _elm_win_apply_alpha(Eo *obj, Efl_Ui_Win_Data *sd) if (!sd->ee) return; enabled = sd->theme_alpha | sd->application_alpha; + _elm_win_opaque_update(sd, EINA_TRUE); if (sd->img_obj) { evas_object_image_alpha_set(sd->img_obj, enabled); @@ -1341,7 +1343,7 @@ _elm_win_opaque_dirty(Efl_Ui_Win_Data *sd) } static void -_elm_win_opaque_update(Efl_Ui_Win_Data *sd) +_elm_win_opaque_update(Efl_Ui_Win_Data *sd, Eina_Bool force_alpha) { #ifdef HAVE_ELEMENTARY_WL2 int ox, oy, ow, oh; @@ -1350,7 +1352,7 @@ _elm_win_opaque_update(Efl_Ui_Win_Data *sd) if (!sd->wl.win) return; wdata = sd->ee->engine.data; - alpha = ecore_evas_alpha_get(sd->ee); + alpha = ecore_evas_alpha_get(sd->ee) || force_alpha; if (sd->fullscreen || !sd->frame_obj) { ecore_evas_geometry_get(sd->ee, NULL, NULL, &ow, &oh); @@ -4019,7 +4021,7 @@ _elm_win_frame_pre_render(void *data, Evas *e EINA_UNUSED, void *ev EINA_UNUSED) Efl_Ui_Win_Data *sd = data; if (sd->wl.opaque_dirty) - _elm_win_opaque_update(sd); + _elm_win_opaque_update(sd, EINA_FALSE); sd->wl.opaque_dirty = 0; } #endif @@ -4227,8 +4229,8 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, Eina_Bool edje_object_message_signal_process(sd->frame_obj); if (calc) evas_object_smart_calculate(sd->frame_obj); - _elm_win_opaque_update(sd); _elm_win_frame_obj_update(sd); + _elm_win_opaque_update(sd, EINA_FALSE); } } --
