Handle window pre visibility change event 36/125036/6 accepted/tizen/3.0/common/20170524.125932 accepted/tizen/3.0/ivi/20170523.235016 accepted/tizen/3.0/mobile/20170523.235009 accepted/tizen/3.0/tv/20170523.235007 accepted/tizen/3.0/wearable/20170523.235013 submit/tizen_3.0/20170522.082647
authorHwankyu Jhun <h.jhun@samsung.com>
Thu, 13 Apr 2017 11:27:00 +0000 (20:27 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Wed, 19 Apr 2017 00:00:29 +0000 (09:00 +0900)
When getting ECORE_WL_WINDOW_VISIBILITY_TYPE_PRE_UNOBSCURED event,
an application is changed to the resume state.
This patch is for backward compatibility.

Change-Id: I1c45e4cde31a6d4de0f25cc617e0d23bb939a476
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/appcore-efl.c

index e98b32bd76bd61b601a59d2e48f26f5489e195bd..0091c3df3efb65c8aeaabca70be8d684f0cf6051 100644 (file)
@@ -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);