I found some CnP and DnD issues during the test. I think we need to discuss this more.
Could you check and give me your opinion?
Drag and Drop
- Ensuring the order of drag enter and drag leave callbacks for drop targets.
I think we should ensure the EFL_UI_DND_EVENT_DROP_ENTERED, EFL_UI_DND_EVENT_DROP_LEFT event call orders
even though we moves the drag object very quickly.
Sometimes, In case of using drop targets more than two.
If we moves the drag object very fast, the Enter and Left events of drop targets come with the unexpected orders.
Enter -> Enter -> Left -> Left
Enter -> Left -> Enter -> Left (sequentially)
This ordering problem can be fixed by modifying the following codes.
In the codes, the event call order is depends on drop_targets orders.
we should make the event call depends on the pointer position.
Code Location : efl_ui_win.c : _motion_cb()
- ECORE_WL2_EVENT_DATA_SOURCE_END event handler is changed to ECORE_WL2_EVENT_DATA_SOURCE_DROP
After refactoring the DnD codes, the ECORE_WL2_EVENT_DATA_SOURCE_END event is changed to
ECORE_WL2_EVENT_DATA_SOURCE_DROP event and this make a problem backword compatibility issue.
This makes the problem that the drag done callback is not called after dropping the drag object.
Code Location : ecore_evas_wayland_common.c : _ecore_evas_wl_selection_init()
- After dropping the object, target->currently_inside should be reset in _drop_cb()
When the drag and drop is finished (In case of dropping the object), the target->currently_inside value should be false.
Otherwise, When we try to drag new object, the left event of the last dropped target will be called.
Code Location: efl_ui_win.c : _drop_cb()
- Why we use ecore_evas_callback_drop_state_changed_set() in _ee_backbone_init and shutdown?
Could you tell me the function of ecore_evas_callback_drop_state_changed_set(),
I think we don't need to use the function.
Code Location: efl_ui_win.c : _ee_backbone_init and _ee_backbone_shutdown
Copy and Paste
- When we try to copy twice by code, sending data is rejected by the ECORE_EVAS_SELECTION_BUFFER_LAST condition.
In case of trying to copy twice, the ev->serial value comes 0 in _wl_interaction_send()
and the sending data is rejected by the condition of ECORE_EVAS_SELECTION_BUFFER_LAST.
This is because when trying to copy twice by code twice, the input->display->serial is not updated.
and this makes the second copy failed.
I think we allow the sending data request even tough the input->display->serial is not updated.
(To allow the multiple copy by code)
Code Location : ecore_evas_wayland_common.c : _wl_interaction_send()