forked from enlightenment/efl
elementary: refactor selection manager to not use eina_promise_data_set.
eina_promise_data_set is a misleading API and result in conflicted use by multiple independent piece of code leading to bug and crash. It is also not necessary and we can avoid using it completely. Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Differential Revision: https://phab.enlightenment.org/D7543
This commit is contained in:
parent
90f6043275
commit
bd2ae0ae85
|
@ -93,8 +93,6 @@ _owner_change_check(Efl_Ui_Selection_Manager *manager, Efl_Object *owner,
|
||||||
(sel_lost->type == type))
|
(sel_lost->type == type))
|
||||||
{
|
{
|
||||||
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
||||||
seat_sel2->sel_lost_list = eina_list_remove(seat_sel2->sel_lost_list, sel_lost);
|
|
||||||
free(sel_lost);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
seat_sel2->xwin = 0;
|
seat_sel2->xwin = 0;
|
||||||
|
@ -138,8 +136,6 @@ _owner_change_check(Efl_Ui_Selection_Manager *manager, Efl_Object *owner,
|
||||||
(sel_lost->type == type))
|
(sel_lost->type == type))
|
||||||
{
|
{
|
||||||
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
||||||
seat_sel->sel_lost_list = eina_list_remove(seat_sel->sel_lost_list, sel_lost);
|
|
||||||
free(sel_lost);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -224,12 +220,10 @@ _sel_manager_seat_selection_init(Efl_Ui_Selection_Manager_Data *pd, unsigned int
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_sel_manager_promise_cancel(void *data, Efl_Loop_Consumer *consumer EINA_UNUSED,
|
_sel_manager_promise_cancel(Eo *obj EINA_UNUSED, void *data, const Eina_Future *dead_future EINA_UNUSED)
|
||||||
const Eina_Promise *dead_future EINA_UNUSED)
|
|
||||||
{
|
{
|
||||||
Sel_Manager_Selection_Lost *sel_lost = data;
|
Sel_Manager_Selection_Lost *sel_lost = data;
|
||||||
sel_lost->seat_sel->sel_lost_list = eina_list_remove(
|
sel_lost->seat_sel->sel_lost_list = eina_list_remove(sel_lost->seat_sel->sel_lost_list, sel_lost);
|
||||||
sel_lost->seat_sel->sel_lost_list, sel_lost);
|
|
||||||
free(sel_lost);
|
free(sel_lost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,12 +242,13 @@ _update_sel_lost_list(Efl_Object *obj, Efl_Ui_Selection_Type type,
|
||||||
sel_lost->seat_sel = seat_sel;
|
sel_lost->seat_sel = seat_sel;
|
||||||
seat_sel->sel_lost_list = eina_list_append(seat_sel->sel_lost_list, sel_lost);
|
seat_sel->sel_lost_list = eina_list_append(seat_sel->sel_lost_list, sel_lost);
|
||||||
|
|
||||||
p = efl_loop_promise_new(obj, NULL, _sel_manager_promise_cancel, NULL);
|
p = efl_loop_promise_new(obj, NULL, NULL, NULL);
|
||||||
eina_promise_data_set(p, sel_lost);
|
|
||||||
if (!p) return NULL;
|
if (!p) return NULL;
|
||||||
sel_lost->promise = p;
|
sel_lost->promise = p;
|
||||||
|
|
||||||
return eina_future_new(p);
|
return efl_future_then(obj, eina_future_new(p),
|
||||||
|
.data = sel_lost,
|
||||||
|
.free = _sel_manager_promise_cancel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: this should not be an actual tempfile, but rather encode the object
|
/* TODO: this should not be an actual tempfile, but rather encode the object
|
||||||
|
@ -1060,8 +1055,6 @@ _x11_selection_clear(void *data, int type EINA_UNUSED, void *event)
|
||||||
{
|
{
|
||||||
sel_debug("resolve the promise: %p", sel_lost->promise);
|
sel_debug("resolve the promise: %p", sel_lost->promise);
|
||||||
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
||||||
seat_sel->sel_lost_list = eina_list_remove(seat_sel->sel_lost_list, sel_lost);
|
|
||||||
free(sel_lost);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sel->active = EINA_FALSE;
|
sel->active = EINA_FALSE;
|
||||||
|
@ -2559,8 +2552,6 @@ _wl_efl_sel_manager_selection_set(Efl_Ui_Selection_Manager_Data *pd,
|
||||||
(sel_lost->type == type))
|
(sel_lost->type == type))
|
||||||
{
|
{
|
||||||
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
||||||
seat_sel->sel_lost_list = eina_list_remove(seat_sel->sel_lost_list, sel_lost);
|
|
||||||
free(sel_lost);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3977,8 +3968,6 @@ _cocoa_efl_sel_manager_selection_set(Efl_Ui_Selection_Manager_Data *pd,
|
||||||
(sel_lost->type == type))
|
(sel_lost->type == type))
|
||||||
{
|
{
|
||||||
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
||||||
seat_sel->sel_lost_list = eina_list_remove(seat_sel->sel_lost_list, sel_lost);
|
|
||||||
free(sel_lost);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sel->owner)
|
if (sel->owner)
|
||||||
|
@ -4219,8 +4208,6 @@ _win32_efl_sel_manager_selection_set(Efl_Ui_Selection_Manager_Data *pd,
|
||||||
(sel_lost->type == type))
|
(sel_lost->type == type))
|
||||||
{
|
{
|
||||||
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
||||||
seat_sel->sel_lost_list = eina_list_remove(seat_sel->sel_lost_list, sel_lost);
|
|
||||||
free(sel_lost);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4815,8 +4802,6 @@ _efl_ui_selection_manager_selection_clear(Eo *obj, Efl_Ui_Selection_Manager_Data
|
||||||
(sel_lost->type == type))
|
(sel_lost->type == type))
|
||||||
{
|
{
|
||||||
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
|
||||||
seat_sel->sel_lost_list = eina_list_remove(seat_sel->sel_lost_list, sel_lost);
|
|
||||||
free(sel_lost);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
seat_sel->sel_list[type].owner = NULL;
|
seat_sel->sel_list[type].owner = NULL;
|
||||||
|
|
Loading…
Reference in New Issue