e_comp_wl: add e_pointer_is_hidden() api and modify cursor_timer to use it 47/58047/4 accepted/tizen/mobile/20160202.115013 accepted/tizen/tv/20160202.115042 accepted/tizen/wearable/20160202.115051 submit/tizen/20160202.055941 submit/tizen_common/20160217.024839
authorDuna Oh <duna.oh@samsung.com>
Wed, 27 Jan 2016 06:15:57 +0000 (15:15 +0900)
committerDuna Oh <duna.oh@samsung.com>
Mon, 1 Feb 2016 05:21:45 +0000 (14:21 +0900)
Signed-off-by: Duna Oh <duna.oh@samsung.com>
Change-Id: I70de4fe63d20faaa9fa61eb55782ebcc6b3132c1

src/bin/e_comp_wl.c
src/bin/e_comp_wl.h
src/bin/e_pointer.c
src/bin/e_pointer.h
src/modules/wl_drm/e_mod_main.c

index bdd4188f633e62ceffd9aeccc86b11ae5fc634b5..db1cf099a8e4932f6dbaddd48111ffcf147a1e45 100644 (file)
@@ -32,9 +32,6 @@ static void _e_comp_wl_subsurface_parent_commit(E_Client *ec, Eina_Bool parent_s
 static void _e_comp_wl_subsurface_restack(E_Client *ec);
 static void _e_comp_wl_subsurface_restack_bg_rectangle(E_Client *ec);
 
-static Eina_Bool _e_comp_wl_cursor_timer(void *data);
-static void _e_comp_wl_cursor_reload(E_Client *ec);
-
 /* local variables */
 typedef struct _E_Comp_Wl_Transform_Context
 {
@@ -833,6 +830,68 @@ _e_comp_wl_device_send_event_device(const char *dev_name, Evas_Device_Class dev_
      }
 }
 
+static void
+_e_comp_wl_cursor_reload(E_Client *ec)
+{
+   struct wl_resource *res;
+   struct wl_client *wc;
+   Eina_List *l;
+   uint32_t serial;
+   int cx, cy;
+
+   if (e_comp->pointer->o_ptr && (!evas_object_visible_get(e_comp->pointer->o_ptr)))
+     e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
+
+   if (!ec) return;
+   if (e_object_is_del(E_OBJECT(ec))) return;
+   if (!ec->comp_data->surface) return;
+
+   cx = wl_fixed_to_int(e_comp_wl->ptr.x) - ec->client.x;
+   cy = wl_fixed_to_int(e_comp_wl->ptr.y) - ec->client.y;
+
+   wc = wl_resource_get_client(ec->comp_data->surface);
+   serial = wl_display_next_serial(e_comp_wl->wl.disp);
+   EINA_LIST_FOREACH(e_comp_wl->ptr.resources, l, res)
+     {
+        if (!e_comp_wl_input_pointer_check(res)) continue;
+        if (wl_resource_get_client(res) != wc) continue;
+        wl_pointer_send_enter(res, serial, ec->comp_data->surface,
+                              wl_fixed_from_int(cx), wl_fixed_from_int(cy));
+     }
+}
+
+static Eina_Bool
+_e_comp_wl_cursor_timer(void *data)
+{
+   E_Client *ec = data;
+   struct wl_resource *res;
+   struct wl_client *wc;
+   Eina_List *l;
+   uint32_t serial;
+
+   ecore_evas_cursor_unset(e_comp->pointer->ee);
+
+   if (e_comp->pointer->o_ptr)
+     e_pointer_hide(e_comp->pointer);
+
+   e_comp_wl->ptr.hide_tmr = NULL;
+
+   if (!ec) return EINA_FALSE;
+   if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE;
+
+   if (!ec->comp_data->surface) return EINA_FALSE;
+   wc = wl_resource_get_client(ec->comp_data->surface);
+   serial = wl_display_next_serial(e_comp_wl->wl.disp);
+   EINA_LIST_FOREACH(e_comp_wl->ptr.resources, l, res)
+     {
+        if (!e_comp_wl_input_pointer_check(res)) continue;
+        if (wl_resource_get_client(res) != wc) continue;
+        wl_pointer_send_leave(res, serial, ec->comp_data->surface);
+     }
+
+   return ECORE_CALLBACK_CANCEL;
+}
+
 static void
 _e_comp_wl_evas_cb_mouse_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
 {
@@ -853,7 +912,7 @@ _e_comp_wl_evas_cb_mouse_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj
 
    if (e_config->use_cursor_timer)
      {
-        if (e_comp_wl->ptr.hidden == EINA_TRUE)
+        if (e_pointer_is_hidden(e_comp->pointer))
           return;
         else
           {
@@ -928,12 +987,10 @@ _e_comp_wl_evas_cb_mouse_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *ob
       ecore_evas_cursor_get(e_comp->ee, &o, NULL, NULL, NULL);
       if ((e_comp->pointer->o_ptr != o) && (e_comp->wl_comp_data->ptr.enabled))
         {
-           if ((!e_config->use_cursor_timer) || (!e_comp->wl_comp_data->ptr.hidden))
+           if ((!e_config->use_cursor_timer) || (!e_pointer_is_hidden(e_comp->pointer)))
              e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
         }
    }
-   if (e_config->use_cursor_timer)
-     E_FREE_FUNC(e_comp_wl->ptr.hide_tmr, ecore_timer_del);
 
    if (e_object_is_del(E_OBJECT(ec))) return;
 
@@ -978,69 +1035,6 @@ _e_comp_wl_send_touch_move(E_Client *ec, int canvas_x, int canvas_y, uint32_t ti
      }
 }
 
-static void
-_e_comp_wl_cursor_reload(E_Client *ec)
-{
-   struct wl_resource *res;
-   struct wl_client *wc;
-   Eina_List *l;
-   uint32_t serial;
-   int cx, cy;
-
-   if (e_object_is_del(E_OBJECT(ec))) return;
-
-   if (e_comp->pointer->o_ptr && (!evas_object_visible_get(e_comp->pointer->o_ptr)))
-     e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
-
-   e_comp_wl->ptr.hidden = EINA_FALSE;
-
-   cx = wl_fixed_to_int(e_comp->wl_comp_data->ptr.x) - ec->client.x;
-   cy = wl_fixed_to_int(e_comp->wl_comp_data->ptr.y) - ec->client.y;
-
-   if (!ec->comp_data->surface) return;
-   wc = wl_resource_get_client(ec->comp_data->surface);
-   serial = wl_display_next_serial(e_comp_wl->wl.disp);
-   EINA_LIST_FOREACH(e_comp_wl->ptr.resources, l, res)
-     {
-        if (!e_comp_wl_input_pointer_check(res)) continue;
-        if (wl_resource_get_client(res) != wc) continue;
-        wl_pointer_send_enter(res, serial, ec->comp_data->surface,
-                              wl_fixed_from_int(cx), wl_fixed_from_int(cy));
-     }
-}
-
-static Eina_Bool
-_e_comp_wl_cursor_timer(void *data)
-{
-   E_Client *ec = data;
-   struct wl_resource *res;
-   struct wl_client *wc;
-   Eina_List *l;
-   uint32_t serial;
-
-   if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE;
-
-   ecore_evas_cursor_unset(e_comp->pointer->ee);
-
-   if (e_comp->pointer->o_ptr)
-     e_pointer_hide(e_comp->pointer);
-
-   e_comp_wl->ptr.hidden = EINA_TRUE;
-   e_comp_wl->ptr.hide_tmr = NULL;
-
-   if (!ec->comp_data->surface) return EINA_FALSE;
-   wc = wl_resource_get_client(ec->comp_data->surface);
-   serial = wl_display_next_serial(e_comp_wl->wl.disp);
-   EINA_LIST_FOREACH(e_comp_wl->ptr.resources, l, res)
-     {
-        if (!e_comp_wl_input_pointer_check(res)) continue;
-        if (wl_resource_get_client(res) != wc) continue;
-        wl_pointer_send_leave(res, serial, ec->comp_data->surface);
-     }
-
-   return ECORE_CALLBACK_CANCEL;
-}
-
 static void
 _e_comp_wl_send_mouse_move(E_Client *ec, int x, int y, unsigned int timestamp)
 {
@@ -1094,7 +1088,7 @@ _e_comp_wl_evas_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
      }
    if (e_config->use_cursor_timer)
      {
-        if (e_comp_wl->ptr.hidden == EINA_TRUE)
+        if (e_pointer_is_hidden(e_comp->pointer))
           _e_comp_wl_cursor_reload(ec);
 
         if (e_comp_wl->ptr.hide_tmr)
@@ -1159,20 +1153,6 @@ _e_comp_wl_evas_cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
    else
      e_comp_wl_evas_handle_mouse_button(ec, ev->timestamp, ev->button,
                                         WL_POINTER_BUTTON_STATE_PRESSED);
-
-   if (e_config->use_cursor_timer)
-     {
-        if (e_comp_wl->ptr.hidden == EINA_TRUE)
-          _e_comp_wl_cursor_reload(ec);
-
-        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);
-     }
 }
 
 static void
@@ -1917,6 +1897,21 @@ _e_comp_wl_cb_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mou
        e_comp_wl->drag_client &&
        e_client_has_xwindow(e_comp_wl->drag_client))
      _e_comp_wl_send_mouse_move(e_comp_wl->drag_client, ev->x, ev->y, ev->timestamp);
+
+   if (e_config->use_cursor_timer)
+     {
+        if (e_pointer_is_hidden(e_comp->pointer))
+          _e_comp_wl_cursor_reload(NULL);
+
+        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, NULL);
+     }
+
    return ECORE_CALLBACK_RENEW;
 }
 
index 4d770388f3b62da580dd72006b29fa9f7fbfaf7f..86eb6021960e4ac8096e594dc0c845c6314a5e4a 100644 (file)
@@ -235,7 +235,6 @@ struct _E_Comp_Wl_Data
         uint32_t button;
         Ecore_Timer *hide_tmr;
         E_Client *ec;
-        Eina_Bool hidden :1;
         Eina_Bool enabled : 1;
         unsigned int num_devices;
      } ptr;
index 67be4903ef860506a19626b1f53037ed7211ce01..6b466337b121bf744e7457465ef78ba1f44e6a07 100644 (file)
@@ -828,3 +828,19 @@ e_pointer_window_add(E_Pointer *ptr, Ecore_Window win)
    _e_pointer_theme_buf(ptr, buf);
    _e_pointer_x11_setup(ptr, buf);
 }
+
+E_API Eina_Bool
+e_pointer_is_hidden(E_Pointer *ptr)
+{
+   Evas_Object *o;
+
+   ecore_evas_cursor_get(ptr->ee, &o, NULL, NULL, NULL);
+   if (o)
+     return EINA_FALSE;
+   else
+     {
+        if (ptr->o_ptr && (evas_object_visible_get(ptr->o_ptr)))
+          return EINA_FALSE;
+     }
+   return EINA_TRUE;
+}
index 91185a6c4d66d13fcac221c8ba575e49231b6df9..01359931bd72e4affbffe05c498bef5e80db95e7 100644 (file)
@@ -73,5 +73,6 @@ E_API void e_pointer_mode_pop(void *obj, E_Pointer_Mode mode);
 E_API void e_pointer_idler_before(void);
 E_API void e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y);
 E_API void e_pointer_window_add(E_Pointer *ptr, Ecore_Window win);
+E_API Eina_Bool e_pointer_is_hidden(E_Pointer *ptr);
 # endif
 #endif
index 7283b48c35bb46caf1a2bea4a8c16f9291a2b19c..c701c1b5e0437b5aecfc6884fabd670ab5f671e4 100644 (file)
@@ -101,14 +101,12 @@ _e_mod_drm_cb_input_device_add(void *data, int type, void *event)
 
    if (!(e = event)) goto end;
 
+       e_config->use_cursor_timer = 1;
    if (e->caps & EVDEV_SEAT_POINTER)
      {
         if (comp->wl_comp_data->ptr.num_devices == 0)
           {
-             if (e_config->use_cursor_timer)
-               comp->wl_comp_data->ptr.hidden = EINA_TRUE;
-             else
-               e_pointer_object_set(comp->pointer, NULL, 0, 0);
+             e_pointer_object_set(comp->pointer, NULL, 0, 0);
              e_comp_wl_input_pointer_enabled_set(EINA_TRUE);
           }
         if (!e_config->show_cursor)