rotation: fixed waiting for buffer change of hidden client 74/109474/1
authorMinJeong Kim <minjjj.kim@samsung.com>
Tue, 10 Jan 2017 07:02:30 +0000 (16:02 +0900)
committerMinJeong Kim <minjjj.kim@samsung.com>
Tue, 10 Jan 2017 07:02:34 +0000 (16:02 +0900)
Change-Id: I2274d5b95069f6a99d948f03ce9422eaf7df737f
Signed-off-by: MinJeong Kim <minjjj.kim@samsung.com>
src/e_mod_effect_rotation.c

index 12c5056..ffb203e 100644 (file)
@@ -858,6 +858,37 @@ _rotation_effect_cb_buffer_change(void *data, int ev_type, void *event)
 }
 
 static Eina_Bool
+_rotation_effect_cb_client_hide(void *data, int ev_type, void *event)
+{
+   E_Event_Client *ev = event;
+   E_Client *ec;
+   Rotation_Effect *effect;
+   E_Desk *desk;
+
+   ec = ev->ec;
+   if (!ec) return ECORE_CALLBACK_PASS_ON;
+
+   effect = (Rotation_Effect *)data;
+   if (!effect) return ECORE_CALLBACK_PASS_ON;
+   if (!effect->ctx_begin) return ECORE_CALLBACK_PASS_ON;
+   if (!effect->waiting_list) return ECORE_CALLBACK_PASS_ON;
+
+   effect->waiting_list = eina_list_remove(effect->waiting_list, ec);
+   if (effect->waiting_list) return ECORE_CALLBACK_PASS_ON;
+
+   if (!effect->wait_for_buffer) return ECORE_CALLBACK_PASS_ON;
+
+   if (!effect->ctx_end)
+     {
+        desk = e_desk_current_get(ec->zone);
+        _rotation_effect_animator_end_prepare(effect, desk);
+     }
+   if (effect->ctx_end) _rotation_effect_start(effect);
+
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
 _rotation_effect_cb_client_remove(void *data, int ev_type, void *event)
 {
    E_Event_Client *ev = event;
@@ -973,6 +1004,10 @@ _rotation_zone_create(E_Zone *zone)
                          _rotation_effect_cb_buffer_change, rotation_zone->effect);
 
    E_LIST_HANDLER_APPEND(rotation_zone->event_hdlrs,
+                         E_EVENT_CLIENT_HIDE,
+                         _rotation_effect_cb_client_hide, rotation_zone->effect);
+
+   E_LIST_HANDLER_APPEND(rotation_zone->event_hdlrs,
                          E_EVENT_CLIENT_REMOVE,
                          _rotation_effect_cb_client_remove, rotation_zone->effect);