e_comp_wl: when the client is deleted, delete cursor_timer 82/59682/5
authorDuna Oh <duna.oh@samsung.com>
Wed, 17 Feb 2016 10:02:12 +0000 (19:02 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Fri, 26 Feb 2016 07:47:12 +0000 (23:47 -0800)
Change-Id: Ia5b6767de362fd904f9a59883e21de604f23471c
Signed-off-by: Duna Oh <duna.oh@samsung.com>
src/bin/e_comp_wl.c

index 169f99437811d5529d590b12d828f49f26ad0098..a2a269d33d63c6e7910cf0967fede7f2352c0fda 100644 (file)
@@ -44,6 +44,7 @@ typedef struct _E_Comp_Wl_Transform_Context
 static Eina_Hash *clients_buffer_hash = NULL;
 static Eina_List *handlers = NULL;
 static double _last_event_time = 0.0;
+static E_Client *cursor_timer_ec = NULL;
 
 /* local functions */
 static void
@@ -875,6 +876,7 @@ _e_comp_wl_cursor_timer(void *data)
      e_pointer_hide(e_comp->pointer);
 
    e_comp_wl->ptr.hide_tmr = NULL;
+   cursor_timer_ec = NULL;
 
    if (!ec) return EINA_FALSE;
    if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE;
@@ -914,16 +916,10 @@ _e_comp_wl_evas_cb_mouse_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj
      {
         if (e_pointer_is_hidden(e_comp->pointer))
           return;
-        else
-          {
-             if (e_comp_wl->ptr.hide_tmr)
-               {
-                  ecore_timer_interval_set(e_comp_wl->ptr.hide_tmr, e_config->cursor_timer_interval);
-                  ecore_timer_reset(e_comp_wl->ptr.hide_tmr);
-               }
-             else
-               e_comp_wl->ptr.hide_tmr = ecore_timer_add(e_config->cursor_timer_interval, _e_comp_wl_cursor_timer, ec);
-          }
+        if (e_comp_wl->ptr.hide_tmr)
+          ecore_timer_del(e_comp_wl->ptr.hide_tmr);
+        cursor_timer_ec = ec;
+        e_comp_wl->ptr.hide_tmr = ecore_timer_add(e_config->cursor_timer_interval, _e_comp_wl_cursor_timer, ec);
      }
 
    e_comp_wl->ptr.ec = ec;
@@ -992,6 +988,12 @@ _e_comp_wl_evas_cb_mouse_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *ob
         }
    }
 
+   if (cursor_timer_ec == ec)
+     {
+        E_FREE_FUNC(e_comp_wl->ptr.hide_tmr, ecore_timer_del);
+        cursor_timer_ec = NULL;
+     }
+
    if (e_object_is_del(E_OBJECT(ec))) return;
 
    if (!ec->comp_data->surface) return;
@@ -1092,11 +1094,23 @@ _e_comp_wl_evas_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
 
         if (e_comp_wl->ptr.hide_tmr)
           {
-             ecore_timer_interval_set(e_comp_wl->ptr.hide_tmr, e_config->cursor_timer_interval);
-             ecore_timer_reset(e_comp_wl->ptr.hide_tmr);
+             if (cursor_timer_ec == ec)
+               {
+                  ecore_timer_interval_set(e_comp_wl->ptr.hide_tmr, e_config->cursor_timer_interval);
+                  ecore_timer_reset(e_comp_wl->ptr.hide_tmr);
+               }
+             else
+               {
+                  ecore_timer_del(e_comp_wl->ptr.hide_tmr);
+                  cursor_timer_ec = ec;
+                  e_comp_wl->ptr.hide_tmr = ecore_timer_add(e_config->cursor_timer_interval, _e_comp_wl_cursor_timer, ec);
+               }
           }
         else
-          e_comp_wl->ptr.hide_tmr = ecore_timer_add(e_config->cursor_timer_interval, _e_comp_wl_cursor_timer, ec);
+          {
+             cursor_timer_ec = ec;
+             e_comp_wl->ptr.hide_tmr = ecore_timer_add(e_config->cursor_timer_interval, _e_comp_wl_cursor_timer, ec);
+          }
      }
 }
 
@@ -1910,11 +1924,23 @@ _e_comp_wl_cb_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mou
 
         if (e_comp_wl->ptr.hide_tmr)
           {
-             ecore_timer_interval_set(e_comp_wl->ptr.hide_tmr, e_config->cursor_timer_interval);
-             ecore_timer_reset(e_comp_wl->ptr.hide_tmr);
+             if (!cursor_timer_ec)
+               {
+                  ecore_timer_interval_set(e_comp_wl->ptr.hide_tmr, e_config->cursor_timer_interval);
+                  ecore_timer_reset(e_comp_wl->ptr.hide_tmr);
+               }
+             else
+               {
+                 ecore_timer_del(e_comp_wl->ptr.hide_tmr);
+                 cursor_timer_ec = NULL;
+                 e_comp_wl->ptr.hide_tmr = ecore_timer_add(e_config->cursor_timer_interval, _e_comp_wl_cursor_timer, NULL);
+               }
           }
         else
-          e_comp_wl->ptr.hide_tmr = ecore_timer_add(e_config->cursor_timer_interval, _e_comp_wl_cursor_timer, NULL);
+          {
+             cursor_timer_ec = NULL;
+             e_comp_wl->ptr.hide_tmr = ecore_timer_add(e_config->cursor_timer_interval, _e_comp_wl_cursor_timer, NULL);
+          }
      }
 
    return ECORE_CALLBACK_RENEW;
@@ -2984,6 +3010,7 @@ _e_comp_wl_compositor_cb_del(void *data EINA_UNUSED)
    if (e_comp_wl->fd_hdlr) ecore_main_fd_handler_del(e_comp_wl->fd_hdlr);
 
    E_FREE_FUNC(e_comp_wl->ptr.hide_tmr, ecore_timer_del);
+   cursor_timer_ec = NULL;
 
    /* free allocated data structure */
    free(e_comp_wl);
@@ -3760,6 +3787,12 @@ _e_comp_wl_client_cb_del(void *data EINA_UNUSED, E_Client *ec)
           }
      }
 
+   if (cursor_timer_ec == ec)
+     {
+        E_FREE_FUNC(e_comp_wl->ptr.hide_tmr, ecore_timer_del);
+        cursor_timer_ec = NULL;
+     }
+
    e_pixmap_cdata_set(ec->pixmap, NULL);
 
    E_FREE(ec->comp_data);