e_comp_wl: add cursor_timer when mouse_wheel and mouse_down/up 03/285903/1
authorduna.oh <duna.oh@samsung.com>
Tue, 13 Dec 2022 06:25:28 +0000 (15:25 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 22 Dec 2022 06:46:14 +0000 (15:46 +0900)
add scenarios when setting cursor hide timer
1. when mouse wheel is scrolled.
2. do not set hide timer when mouse down occurs, and set hide timer
when mouse up occurs.

Change-Id: I3ff45dcd1ffcef9dff30acb9487992fe43e8cbe1

src/bin/e_comp_wl.c

index fcadd0a..eed2815 100644 (file)
@@ -1373,8 +1373,11 @@ _e_comp_wl_evas_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
              _e_comp_wl_send_mouse_move(ec, ev->cur.canvas.x, ev->cur.canvas.y, ev->timestamp);
 
              e_pointer_mouse_move(e_comp->pointer, ev->cur.output.x, ev->cur.output.y);
-             if (e_config->use_cursor_timer)
-               _e_comp_wl_cursor_move_timer_control(ec);
+             if (!need_send_released) // set cursor's hide_tmr only when mouse button is not pressed
+               {
+                  if (e_config->use_cursor_timer)
+                    _e_comp_wl_cursor_move_timer_control(ec);
+               }
           }
      }
 }
@@ -1436,6 +1439,13 @@ _e_comp_wl_evas_cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
      {
         if (e_config->use_cursor_timer)
           {
+             if (e_comp_wl->ptr.hide_tmr)
+               {
+                  ecore_timer_del(e_comp_wl->ptr.hide_tmr);
+                  e_comp_wl->ptr.hide_tmr = NULL;
+               }
+             cursor_timer_ec = NULL;
+
              if (e_pointer_is_hidden(e_comp->pointer))
                _e_comp_wl_cursor_reload(ec);
           }
@@ -1444,8 +1454,6 @@ _e_comp_wl_evas_cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
                                            WL_POINTER_BUTTON_STATE_PRESSED);
 
         e_pointer_mouse_move(e_comp->pointer, ev->output.x, ev->output.y);
-        if (e_config->use_cursor_timer)
-          _e_comp_wl_cursor_move_timer_control(ec);
      }
 
    need_send_released = EINA_TRUE;
@@ -1510,8 +1518,13 @@ _e_comp_wl_evas_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *even
         _e_comp_wl_evas_handle_mouse_button_to_touch(ec, ev->timestamp, ev->canvas.x, ev->canvas.y, EINA_FALSE);
      }
    else
-     e_comp_wl_evas_handle_mouse_button(ec, ev->timestamp, ev->button,
-                                        WL_POINTER_BUTTON_STATE_RELEASED);
+     {
+        e_comp_wl_evas_handle_mouse_button(ec, ev->timestamp, ev->button,
+                                           WL_POINTER_BUTTON_STATE_RELEASED);
+
+        if (e_config->use_cursor_timer)
+          _e_comp_wl_cursor_move_timer_control(ec);
+     }
 
 finish:
    need_send_released = EINA_FALSE;
@@ -1565,9 +1578,21 @@ _e_comp_wl_evas_cb_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object *
    if (!eina_list_count(e_comp_wl->ptr.resources))
      return;
 
+   if (e_config->use_cursor_timer)
+      {
+         if (e_pointer_is_hidden(e_comp->pointer))
+           _e_comp_wl_cursor_reload(ec);
+      }
+
    _e_comp_wl_device_send_event_device(ec, ev->dev, ev->timestamp);
 
-  _e_comp_wl_mouse_wheel_send(ec, ev->direction, ev->z, ev->timestamp);
+   _e_comp_wl_mouse_wheel_send(ec, ev->direction, ev->z, ev->timestamp);
+
+   if (!need_send_released) // set cursor's hide_tmr only when mouse button is not pressed
+     {
+        if (e_config->use_cursor_timer)
+          _e_comp_wl_cursor_move_timer_control(ec);
+     }
 }
 
 static void
@@ -5567,11 +5592,23 @@ e_comp_wl_mouse_wheel_send(E_Client *ec, int direction, int z, Ecore_Device *dev
    if (!time) time = (uint32_t)(ecore_time_get() * 1000);
    serial = wl_display_next_serial(e_comp_wl->wl.disp);
 
+   if (e_config->use_cursor_timer)
+      {
+         if (e_pointer_is_hidden(e_comp->pointer))
+           _e_comp_wl_cursor_reload(ec);
+      }
+
    if (dev) _e_comp_wl_send_event_device(wc, time, dev, serial);
    else _e_comp_wl_device_send_last_event_device(ec, ECORE_DEVICE_CLASS_MOUSE, time);
 
    _e_comp_wl_mouse_wheel_send(ec, direction, z, time);
 
+   if (!need_send_released) // set cursor's hide_tmr only when mouse button is not pressed
+     {
+        if (e_config->use_cursor_timer)
+          _e_comp_wl_cursor_move_timer_control(ec);
+     }
+
    return EINA_TRUE;
 }