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);
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);
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)
{
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())
{