e_comp_wl: fix to set and use ec->pointer_enter_sent properly 62/298462/2 accepted/tizen/unified/20230908.083312
authorduna.oh <duna.oh@samsung.com>
Thu, 7 Sep 2023 06:42:18 +0000 (15:42 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Thu, 7 Sep 2023 08:25:01 +0000 (08:25 +0000)
In MouseIn cb, e_comp_wl->ptr.ec is set to a new ec which pointer entered.
And previous ec's pointer_enter_sent should be set to FALSE.

In MouseMove/Wheel/Button cb, e_comp_wl_cursor_reload() should be called when
pointer_enter_sent is FALSE.

Change-Id: I00599053ceab11ec4546d5598e2ad23c070dcf3e

src/bin/e_comp_wl.c

index 014cd52..6d630ee 100644 (file)
@@ -1163,7 +1163,7 @@ _e_comp_wl_cursor_timer_control(Evas_Callback_Type type, E_Client *ec)
           ret = _e_comp_wl_intercept_hook_call(E_COMP_WL_INTERCEPT_HOOK_CURSOR_TIMER_MOUSE_MOVE, ec);
           if (!ret) break;
 
-          if (e_pointer_is_hidden(e_comp->pointer))
+          if (e_pointer_is_hidden(e_comp->pointer) || !ec->pointer_enter_sent)
             _e_comp_wl_cursor_reload(ec);
           break;
 
@@ -1171,7 +1171,7 @@ _e_comp_wl_cursor_timer_control(Evas_Callback_Type type, E_Client *ec)
           ret = _e_comp_wl_intercept_hook_call(E_COMP_WL_INTERCEPT_HOOK_CURSOR_TIMER_MOUSE_WHEEL, ec);
           if (!ret) break;
 
-          if (e_pointer_is_hidden(e_comp->pointer))
+          if (e_pointer_is_hidden(e_comp->pointer) || !ec->pointer_enter_sent)
             _e_comp_wl_cursor_reload(ec);
           break;
 
@@ -1186,7 +1186,7 @@ _e_comp_wl_cursor_timer_control(Evas_Callback_Type type, E_Client *ec)
             }
           cursor_timer_ec = NULL;
 
-          if (e_pointer_is_hidden(e_comp->pointer))
+          if (e_pointer_is_hidden(e_comp->pointer) || !ec->pointer_enter_sent)
             _e_comp_wl_cursor_reload(ec);
           break;
 
@@ -1225,7 +1225,8 @@ _e_comp_wl_evas_cb_mouse_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj
    struct wl_client *wc;
    Eina_List *l;
    uint32_t serial;
-   E_Comp_Config *comp_conf = NULL;
+   E_Comp_Config *comp_conf;
+   E_Client *prev_ptr_ec;
 
    ev = event;
 
@@ -1237,6 +1238,13 @@ _e_comp_wl_evas_cb_mouse_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj
    struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
    if (!surface) return;
 
+   prev_ptr_ec = e_comp_wl->ptr.ec;
+   if (prev_ptr_ec)
+     {
+        ELOGF("Mouse", "In (prev_ptr_ec: %p pointer_enter_sent: %d)", ec, prev_ptr_ec, prev_ptr_ec->pointer_enter_sent);
+        prev_ptr_ec->pointer_enter_sent = EINA_FALSE;
+     }
+
    e_comp_wl->ptr.ec = ec;
 
    comp_conf = e_comp_config_get();
@@ -1280,7 +1288,7 @@ _e_comp_wl_evas_cb_mouse_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *ob
    Eina_List *l;
    uint32_t serial;
    Eina_Bool inside_check;
-   E_Comp_Config *comp_conf = NULL;
+   E_Comp_Config *comp_conf;
 
    ev = event;
 
@@ -1456,7 +1464,7 @@ _e_comp_wl_evas_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
    Evas_Event_Mouse_Move *ev;
    Evas_Device *dev = NULL;
    const char *dev_name;
-   E_Comp_Config *comp_conf = NULL;
+   E_Comp_Config *comp_conf;
 
    ev = event;