add E_POINTER_HOOK_SHOW/HIDE hooks 63/282763/1
authorduna.oh <duna.oh@samsung.com>
Tue, 11 Oct 2022 01:00:10 +0000 (10:00 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 11 Oct 2022 07:56:31 +0000 (16:56 +0900)
Change-Id: I919eac923e0e87e6d8daaf1e9c531d35b1d728b4

src/bin/e_pointer.c
src/bin/e_pointer.h

index 7138e2ed440a804ab789762a6eaaa480e3bca4d7..33a610fe64ed5bf89a7274782a16a53ca5733e6d 100644 (file)
@@ -10,6 +10,8 @@ static Eina_Inlist *_e_pointer_hooks[] =
 {
    [E_POINTER_HOOK_TOUCH_MOVE] = NULL,
    [E_POINTER_HOOK_MOUSE_MOVE] = NULL,
+   [E_POINTER_HOOK_SHOW] = NULL,
+   [E_POINTER_HOOK_HIDE] = NULL,
 };
 
 /* move the cursor image with the calcaultion of the hot spot */
@@ -243,13 +245,18 @@ EINTERN void
 e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y)
 {
    E_Client *ec;
+   Eina_Bool need_call_hide = EINA_FALSE;
 
    EINA_SAFETY_ON_NULL_RETURN(ptr);
 
    /* don't show cursor if in hidden mode */
    if ((!e_config->show_cursor) || (!e_comp_wl->ptr.enabled))
      {
-        e_pointer_hide(ptr);
+        if (ptr->o_ptr && evas_object_visible_get(ptr->o_ptr))
+          {
+             _e_pointer_hook_call(E_POINTER_HOOK_HIDE, ptr);
+             e_pointer_hide(ptr);
+          }
         _e_pointer_object_set(ptr, NULL);
         ptr->device = E_POINTER_NONE;
         return;
@@ -272,7 +279,11 @@ e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y)
            ptr->hwc = EINA_FALSE;
 
         /* hide cursor object */
-        evas_object_hide(ptr->o_ptr);
+        if (evas_object_visible_get(ptr->o_ptr))
+          {
+             need_call_hide = EINA_TRUE;
+             e_pointer_hide(ptr);
+          }
         _e_pointer_object_set(ptr, NULL);
         ptr->device = E_POINTER_NONE;
      }
@@ -307,8 +318,15 @@ e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y)
         _e_pointer_rotation_apply(ptr);
 
         /* show cursor object */
-        evas_object_show(obj);
+        if (!evas_object_visible_get(ptr->o_ptr))
+          {
+             need_call_hide = EINA_FALSE;
+             _e_pointer_hook_call(E_POINTER_HOOK_SHOW, ptr);
+             evas_object_show(ptr->o_ptr);
+          }
      }
+   if (need_call_hide)
+     _e_pointer_hook_call(E_POINTER_HOOK_HIDE, ptr);
 }
 
 E_API void
index d125629a34eab7397e945f49757544a4016ba64b..9ba954fdcea3d39f324032ab49e51c9870c02726 100644 (file)
@@ -29,6 +29,8 @@ typedef enum _E_Pointer_Hook_Point
 {
    E_POINTER_HOOK_TOUCH_MOVE,
    E_POINTER_HOOK_MOUSE_MOVE,
+   E_POINTER_HOOK_SHOW,
+   E_POINTER_HOOK_HIDE,
    E_POINTER_HOOK_LAST,
 } E_Pointer_Hook_Point;