e_comp_wl: process mouse wheel event by ecore event 73/321973/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Mon, 24 Mar 2025 11:30:08 +0000 (20:30 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 2 Apr 2025 01:11:18 +0000 (10:11 +0900)
Change-Id: Ic9886bea92064dc7311651e0bfa8d8384f01f46c
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/server/e_comp_wl.c

index 43ea8572c32b8f18d0f3ac59718256d6ba3c6317..5ea91fcd491fb2bc868b809699a2aae8176479d4 100644 (file)
@@ -2241,8 +2241,8 @@ _e_comp_wl_client_evas_init(E_Client *ec)
         evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MOUSE_MOVE,  EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_mouse_move,  ec);
         evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MOUSE_DOWN,  EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_mouse_down,  ec);
         evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MOUSE_UP,    EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_mouse_up,    ec);
+        evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MOUSE_WHEEL, EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_mouse_wheel, ec);
      }
-   evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MOUSE_WHEEL, EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_mouse_wheel, ec);
 
    evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MULTI_DOWN, EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_multi_down, ec);
    evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MULTI_UP,   EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_multi_up,   ec);
@@ -2271,8 +2271,8 @@ _e_comp_wl_client_evas_deinit(E_Client *ec)
         evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_MOVE,  _e_comp_wl_evas_cb_mouse_move);
         evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_DOWN,  _e_comp_wl_evas_cb_mouse_down);
         evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_UP,    _e_comp_wl_evas_cb_mouse_up);
+        evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_WHEEL, _e_comp_wl_evas_cb_mouse_wheel);
      }
-   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_WHEEL, _e_comp_wl_evas_cb_mouse_wheel);
 
    evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MULTI_DOWN, _e_comp_wl_evas_cb_multi_down);
    evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MULTI_UP,   _e_comp_wl_evas_cb_multi_up);
@@ -2530,6 +2530,57 @@ end:
    return ECORE_CALLBACK_RENEW;
 }
 
+static Eina_Bool
+_e_comp_wl_cb_mouse_wheel(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_Wheel *ev)
+{
+   E_Client *ec;
+   E_Comp_Wl_Data *comp_wl;
+
+   E_Zone *client_zone;
+   char *seat_name;
+   struct wl_resource *surface;
+   Ecore_Device *dev = NULL;
+
+   dev = ev->dev;
+
+   seat_name = ecore_device_ex_seatname_get(dev);
+   client_zone = e_seat_zone_get(e_seat_find(seat_name));
+   ec = _e_comp_wl_under_position_input_ec_get(client_zone, ev->x, ev->y);
+
+   if (!ec) goto end;
+   if (ec->cur_mouse_action) goto end;
+   if (e_object_is_del(E_OBJECT(ec))) goto end;
+   if ((ec->ignored) && (!ec->remote_surface.provider)) goto end;
+   surface = e_comp_wl_client_surface_get(ec);
+   if (!surface) goto end;
+
+   comp_wl = e_comp_wl_get();
+
+   if (e_seat_pointer_is_empty(NULL)) goto end;
+
+   if (_e_comp_wl_check_cursor_timer_needed(ec))
+      {
+         if (!_e_comp_wl_cursor_timer_control(EVAS_CALLBACK_MOUSE_WHEEL, comp_wl, ec))
+           goto end;
+      }
+
+   if (e_input_backend_mouse_printing_needed())
+     e_input_backend_mouse_timestamp_append(ev->timestamp);
+
+   _e_comp_wl_device_send_event_device(comp_wl, ec, ev->dev, ev->timestamp);
+
+   _e_comp_wl_mouse_wheel_send(comp_wl, 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_comp_wl_check_cursor_timer_needed(ec))
+          _e_comp_wl_cursor_move_timer_control(comp_wl, ec);
+     }
+
+end:
+   return ECORE_CALLBACK_RENEW;
+}
+
 static void
 _e_comp_wl_zone_send_mouse_button(Ecore_Event_Mouse_Button *ev, Eina_Bool pressed)
 {
@@ -3744,6 +3795,7 @@ e_comp_wl_init(void)
         E_LIST_HANDLER_PREPEND(handlers, ECORE_EVENT_MOUSE_MOVE,          _e_comp_wl_cb_mouse_move,          NULL);
         E_LIST_HANDLER_PREPEND(handlers, ECORE_EVENT_MOUSE_BUTTON_DOWN,   _e_comp_wl_cb_mouse_button_down,   NULL);
         E_LIST_HANDLER_PREPEND(handlers, ECORE_EVENT_MOUSE_BUTTON_UP,     _e_comp_wl_cb_mouse_button_up,     NULL);
+        E_LIST_HANDLER_PREPEND(handlers, ECORE_EVENT_MOUSE_WHEEL,         _e_comp_wl_cb_mouse_wheel,         NULL);
      }
    if (e_input_thread_mode_get())
      {