diff options
Diffstat (limited to 'src/appcore-efl.c')
-rw-r--r-- | src/appcore-efl.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/appcore-efl.c b/src/appcore-efl.c index e98b32b..0091c3d 100644 --- a/src/appcore-efl.c +++ b/src/appcore-efl.c @@ -65,6 +65,7 @@ struct ui_priv { Ecore_Event_Handler *hvchange; #if defined(WAYLAND) Ecore_Event_Handler *hlower; + Ecore_Event_Handler *hpvchange; #endif Ecore_Event_Handler *hcmsg; /* WM_ROTATE */ @@ -887,6 +888,27 @@ static Eina_Bool __visibility_cb(void *data, int type, void *event) } +#if defined(WAYLAND) +static Eina_Bool __pre_visibility_cb(void *data, int type, void *event) +{ + Ecore_Wl_Event_Window_Pre_Visibility_Change *ev = event; + bool bvisibility; + + if (ev && ev->type == ECORE_WL_WINDOW_VISIBILITY_TYPE_PRE_UNOBSCURED) { + __update_win((unsigned int)ev->win, 0, false); + bvisibility = __check_visible(); + _DBG("bvisibility %d, b_active %d", bvisibility, b_active); + if (bvisibility && b_active == FALSE) { + _DBG("Go to Resume state\n"); + b_active = TRUE; + __do_app(AE_RESUME, data, NULL); + } + } + + return ECORE_CALLBACK_RENEW; +} +#endif + #if defined(X11) /* WM_ROTATE */ static Eina_Bool __cmsg_cb(void *data, int type, void *event) @@ -950,6 +972,8 @@ static void __add_climsg_cb(struct ui_priv *ui) ui->hlower = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_LOWER, __lower_cb, ui); + ui->hpvchange = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_PRE_VISIBILITY_CHANGE, + __pre_visibility_cb, ui); #elif defined(X11) ui->hshow = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW, __show_cb, ui); @@ -1080,6 +1104,8 @@ static void __after_loop(struct ui_priv *ui) #if defined(WAYLAND) if (ui->hlower) ecore_event_handler_del(ui->hlower); + if (ui->hpvchange) + ecore_event_handler_del(ui->hpvchange); #endif __appcore_timer_del(ui); |