summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiep Ha <thiepha@gmail.com>2017-10-16 18:03:44 +0900
committerThiep Ha <thiepha@gmail.com>2017-12-08 11:15:10 +0900
commit952b25031f296522b69ba1974c0a4ccdc4143dd7 (patch)
tree24bb4f28067e34ee0bb74a89133d271d411cd211
parent3ee086f3ed9ca79c706ea8bf6bf9100633485cd3 (diff)
downloadefl-952b25031f296522b69ba1974c0a4ccdc4143dd7.tar.gz
x11: add data preparer
-rw-r--r--src/bin/elementary/test_efl_cnp.c11
-rw-r--r--src/lib/elementary/efl_cnp.c4
-rw-r--r--src/lib/elementary/efl_selection_manager.c713
-rw-r--r--src/lib/elementary/efl_selection_manager_private.h94
4 files changed, 392 insertions, 430 deletions
diff --git a/src/bin/elementary/test_efl_cnp.c b/src/bin/elementary/test_efl_cnp.c
index 8507366f30..ff77443787 100644
--- a/src/bin/elementary/test_efl_cnp.c
+++ b/src/bin/elementary/test_efl_cnp.c
@@ -28,9 +28,10 @@ _selection_get_cb(void *data, Efl_Event const *event)
}
static void
-_selection_data_ready_cb(void *data, Eo *obj, void *buf, int length)
+//_selection_data_ready_cb(void *data, Eo *obj, void *buf, int length)
+_selection_data_ready_cb(void *data, Eo *obj, Efl_Selection_Data *seldata)
{
- printf("obj: %p, data: %s, length: %d\n", obj, (char *)buf, length);
+ printf("obj: %p, data: %s, length: %d\n", obj, (char *)seldata->data, seldata->len);
}
static void
@@ -81,7 +82,7 @@ _selection_get_btn_cb(void *data, Evas_Object *obj, void *event_info)
static void
_selection_set_btn_cb(void *data, Evas_Object *obj, void *event_info)
{
- efl_selection_set(obj, EFL_SELECTION_TYPE_PRIMARY, EFL_SELECTION_FORMAT_TEXT,
+ efl_selection_set(obj, EFL_SELECTION_TYPE_PRIMARY, EFL_SELECTION_FORMAT_TARGETS,
"new", 3, NULL);
}
@@ -143,9 +144,9 @@ elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
//test cnp
//Evas_Object *cnp = efl_add(EFL_CNP_CLASS, en);
- efl_selection_set(bt, EFL_SELECTION_TYPE_PRIMARY, EFL_SELECTION_FORMAT_TEXT, "abc", 3, NULL);
+ //efl_selection_set(bt, EFL_SELECTION_TYPE_PRIMARY, EFL_SELECTION_FORMAT_TEXT, "abc", 3, NULL);
- efl_selection_get(bt, EFL_SELECTION_TYPE_PRIMARY, EFL_SELECTION_FORMAT_TEXT, NULL, _selection_data_ready_cb, NULL, seat);
+ //efl_selection_get(bt, EFL_SELECTION_TYPE_PRIMARY, EFL_SELECTION_FORMAT_TEXT, NULL, _selection_data_ready_cb, NULL, seat);
//efl_event_callback_add(bt, EFL_SELECTION_EVENT_SELECTION_LOSS, _selection_loss_event_cb, NULL);
diff --git a/src/lib/elementary/efl_cnp.c b/src/lib/elementary/efl_cnp.c
index a4dd9e3d96..a4f0585efa 100644
--- a/src/lib/elementary/efl_cnp.c
+++ b/src/lib/elementary/efl_cnp.c
@@ -26,7 +26,7 @@ _selection_manager_get(Eo *obj)
Eo *sel_man = efl_key_data_get(top, "__selection_manager");
if (!sel_man)
{
- Eo *sel_man = efl_add(EFL_SELECTION_MANAGER_CLASS, top);
+ sel_man = efl_add(EFL_SELECTION_MANAGER_CLASS, top);
efl_key_data_set(top, "__selection_manager", sel_man);
}
return sel_man;
@@ -38,6 +38,7 @@ _efl_cnp_efl_selection_selection_get(Eo *obj, Efl_Cnp_Data *pd, Efl_Selection_Ty
{
ERR("In");
Eo *sel_man = _selection_manager_get(obj);
+ ERR("sel_man: %p", sel_man);
efl_selection_manager_selection_get(sel_man, obj, type, format,
data_func_data, data_func,
data_func_free_cb, seat);
@@ -48,6 +49,7 @@ _efl_cnp_efl_selection_selection_set(Eo *obj, Efl_Cnp_Data *pd, Efl_Selection_Ty
{
ERR("In");
Eo *sel_man = _selection_manager_get(obj);
+ ERR("sel_man: %p", sel_man);
efl_selection_manager_selection_set(sel_man, obj, type, format, buf, len, seat);
}
diff --git a/src/lib/elementary/efl_selection_manager.c b/src/lib/elementary/efl_selection_manager.c
index 76bf8dd587..9a55e3d785 100644
--- a/src/lib/elementary/efl_selection_manager.c
+++ b/src/lib/elementary/efl_selection_manager.c
@@ -24,8 +24,6 @@
//FIXME: data in selection_set and converter: pd???
-static Eina_Bool _x11_is_uri_type_data(X11_Cnp_Selection *sel EINA_UNUSED, Ecore_X_Event_Selection_Notify *notify);
-
/* TODO: this should not be an actual tempfile, but rather encode the object
* as http://dataurl.net/ if it's an image or similar. Evas should support
* decoding it as memfile. */
@@ -164,49 +162,29 @@ _x11_xwin_get(Evas_Object *obj)
}
static Eina_Bool
-_x11_notify_text(Ecore_X_Event_Selection_Notify *notify, Efl_Selection_Data *ddata)
+_x11_is_uri_type_data(X11_Cnp_Selection *sel EINA_UNUSED, Ecore_X_Event_Selection_Notify *notify)
{
- Ecore_X_Selection_Data *data = notify->data;
- ddata->format = ELM_SEL_FORMAT_TEXT;
- ddata->data = eina_memdup(data->data, data->length, EINA_TRUE);
- ddata->len = data->length;
-
- return EINA_TRUE;
-}
+ Ecore_X_Selection_Data *data;
+ char *p;
-/*static Eina_Bool
-_efl_sel_manager_x11_selection_notify(void *udata, int type EINA_UNUSED, void *event)
-{
- ERR("in");
- Efl_Selection_Manager_Data *pd = udata;
- Ecore_X_Event_Selection_Notify *ev = event;
- Ecore_X_Selection_Data *data = ev->data;
- ERR("data: %s (%d), target: %s", (char *)data->data, data->length, ev->target);
- Efl_Cnp_Selection *sd = malloc(sizeof(Efl_Cnp_Selection));
- if (!sd) ERR("failed to allocate sd memory");
- sd->data = malloc(data->length);
- if (!sd->data) ERR("failed to allocate sd->data memory");
- memcpy(sd->data, data->data, data->length);
- sd->length = data->length;
-
- if (pd->data_func)
+ data = notify->data;
+ sel_debug("data->format is %d %p %p", data->format, notify, data);
+ if (data->content == ECORE_X_SELECTION_CONTENT_FILES) return EINA_TRUE;
+ p = (char *)data->data;
+ if (!p) return EINA_TRUE;
+ sel_debug("Got %s", p);
+ if (strncmp(p, "file:/", 6))
{
- ERR("call function data pointer");
- pd->data_func(pd->data_func_data, pd->obj, sd->data, sd->length);
- pd->data_func_data = NULL;
- pd->data_func = NULL;
- pd->data_func_free_cb = NULL;
+ if (*p != '/') return EINA_FALSE;
}
- //ecore_event_handler_del(pd->notify_handler);
- //pd->notify_handler = NULL;
-
return EINA_TRUE;
-}*/
+}
static Eina_Bool
_x11_data_preparer_text(Efl_Selection_Manager_Data *pd, Ecore_X_Event_Selection_Notify *notify,
Efl_Selection_Data *ddata, Tmp_Info **tmp_info EINA_UNUSED)
{
+ sel_debug("text data preparer");
Ecore_X_Selection_Data *data = notify->data;
ddata->format = EFL_SELECTION_FORMAT_TEXT;
ddata->data = eina_memdup(data->data, data->length, EINA_TRUE);
@@ -218,6 +196,7 @@ static Eina_Bool
_x11_data_preparer_markup(Efl_Selection_Manager_Data *pd, Ecore_X_Event_Selection_Notify *notify,
Efl_Selection_Data *ddata, Tmp_Info **tmp_info EINA_UNUSED)
{
+ sel_debug("markup data preparer");
Ecore_X_Selection_Data *data = notify->data;
ddata->format = EFL_SELECTION_FORMAT_MARKUP;
ddata->data = eina_memdup(data->data, data->length, EINA_TRUE);
@@ -232,6 +211,7 @@ static Eina_Bool
_x11_data_preparer_uri(Efl_Selection_Manager_Data *pd, Ecore_X_Event_Selection_Notify *notify,
Efl_Selection_Data *ddata, Tmp_Info **tmp_info EINA_UNUSED)
{
+ sel_debug("uri data preparer");
Ecore_X_Selection_Data *data;
Ecore_X_Selection_Data_Files *files;
char *p, *stripstr = NULL;
@@ -312,7 +292,7 @@ _x11_data_preparer_uri(Efl_Selection_Manager_Data *pd, Ecore_X_Event_Selection_N
}
else
{
- ddata->format = ELM_SEL_FORMAT_IMAGE;
+ ddata->format = EFL_SELECTION_FORMAT_IMAGE;
ddata->data = stripstr;
ddata->len = strlen(stripstr);
pd->savedtypes->imgfile = NULL;
@@ -363,40 +343,40 @@ _x11_data_preparer_image(Efl_Selection_Manager_Data *pd, Ecore_X_Event_Selection
static Eina_Bool
_x11_notify_handler_targets(Efl_Selection_Manager_Data *pd, X11_Cnp_Selection *sel, Ecore_X_Event_Selection_Notify *notify)
{
+ sel_debug("notify handler targets");
Ecore_X_Selection_Data_Targets *targets;
Ecore_X_Atom *atomlist;
int i, j;
targets = notify->data;
atomlist = (Ecore_X_Atom *)(targets->data.data);
- for (j = (CNP_ATOM_LISTING_ATOMS + 1); j < SELECTION_N_ATOMS; j++)
+ for (j = (SELECTION_ATOM_LISTING_ATOMS + 1); j < SELECTION_N_ATOMS; j++)
{
- sel_debug("\t%s %d\n", pd->atomlist[j].name, pd->atomlist[j].x_atom);
- if (!(pd->atomlist[j].format & sel->requestformat)) continue;
+ sel_debug("\t%s %d", pd->atomlist[j].name, pd->atomlist[j].x_atom);
+ if (!(pd->atomlist[j].format & sel->request_format)) continue;
for (i = 0; i < targets->data.length; i++)
{
if ((pd->atomlist[j].x_atom == atomlist[i]) && (pd->atomlist[j].x_data_preparer))
{
- if (j == CNP_ATOM_text_urilist)
+ if (j == SELECTION_ATOM_TEXT_URILIST)
{
if (!_x11_is_uri_type_data(sel, notify)) continue;
}
- sel_debug("Atom %s matches\n", pd->atomlist[j].name);
+ sel_debug("Atom %s matches", pd->atomlist[j].name);
goto done;
}
}
}
- sel_debug("Couldn't find anything that matches\n");
+ sel_debug("Couldn't find anything that matches");
return ECORE_CALLBACK_PASS_ON;
done:
- sel_debug("Sending request for %s, xwin=%#llx\n",
+ sel_debug("Sending request for %s, xwin=%#llx",
pd->atomlist[j].name, (unsigned long long)sel->xwin);
sel->request(sel->xwin, pd->atomlist[j].name);
return ECORE_CALLBACK_PASS_ON;
}
-
/*
* Response to a selection notify:
* - So we have asked for the selection list.
@@ -411,7 +391,7 @@ _efl_sel_manager_x11_selection_notify(void *udata, int type EINA_UNUSED, void *e
X11_Cnp_Selection *sel;
int i;
- sel_debug("selection notify callback: %d\n",ev->selection);
+ sel_debug("selection notify callback: %d",ev->selection);
switch (ev->selection)
{
case ECORE_X_SELECTION_PRIMARY:
@@ -429,7 +409,7 @@ _efl_sel_manager_x11_selection_notify(void *udata, int type EINA_UNUSED, void *e
default:
return ECORE_CALLBACK_PASS_ON;
}
- sel_debug("Target is %s\n", ev->target);
+ sel_debug("Target is %s", ev->target);
if (ev->selection != ECORE_X_SELECTION_XDND &&
(!strcmp(ev->target, "TARGETS") || !strcmp(ev->target, "ATOMS")))
@@ -447,7 +427,7 @@ _efl_sel_manager_x11_selection_notify(void *udata, int type EINA_UNUSED, void *e
Tmp_Info *tmp_info = NULL;
Eina_Bool success;
ddata.data = NULL;
- sel_debug("Found something: %s\n", pd->atomlist[i].name);
+ sel_debug("Found something: %s", pd->atomlist[i].name);
success = pd->atomlist[i].x_data_preparer(pd, ev, &ddata, &tmp_info);
if ((pd->atomlist[i].format == EFL_SELECTION_FORMAT_IMAGE) &&
(pd->savedtypes->imgfile))
@@ -462,7 +442,7 @@ _efl_sel_manager_x11_selection_notify(void *udata, int type EINA_UNUSED, void *e
sel_debug("drag & drop\n");
EINA_LIST_FOREACH(drops, l, dropable)
{
- if (dropable->obj == sel->requestwidget) break;
+ if (dropable->obj == sel->request_widget) break;
dropable = NULL;
}
if (dropable)
@@ -480,82 +460,21 @@ _efl_sel_manager_x11_selection_notify(void *udata, int type EINA_UNUSED, void *e
/* We have to finish DnD, no matter what */
ecore_x_dnd_send_finished();
}
- //else if (sel->datacb && success)
- else if (pd->data_func && success)
+ else if (sel->data_func && success)
{
ddata.x = ddata.y = 0;
- pd->data_func(pd->data_func_data, pd->obj, &ddata);
- //sel->datacb(sel->udata, sel->requestwidget, &ddata);
+ sel->data_func(sel->data_func_data, sel->request_obj, &ddata);
}
free(ddata.data);
if (tmp_info) _tmpinfo_free(tmp_info);
}
- else sel_debug("Ignored: No handler!\n");
+ else sel_debug("Ignored: No handler!");
break;
}
}
return ECORE_CALLBACK_PASS_ON;
}
-
-
-#ifdef HAVE_ELEMENTARY_X
-static void
-_x11_efl_sel_manager_selection_set(Eo *obj, Efl_Selection_Manager_Data *pd,
- Efl_Selection_Type type, Efl_Selection_Format format,
- const void *buf, int len, Efl_Input_Device *seat)
-{
- Ecore_X_Window xwin = _x11_xwin_get(obj);
-
- pd->buf = malloc(len);
- if (!pd->buf)
- {
- ERR("failed to allocate memory");
- }
- pd->buf = memcpy(pd->buf, buf, len);
- pd->len = len;
-
- pd->active_type = type;
- sel_debug("pd active_type: %d, active_format: %d", pd->active_type, pd->active_format);
- pd->active_format = format;
- if (pd->sellist[type].selbuf)
- {
- free(pd->sellist[type].selbuf);
- }
- pd->sellist[type].selbuf = malloc(len);
- if (!pd->sellist[type].selbuf)
- {
- ERR("failed to allocate buf");
- return;
- }
- pd->sellist[type].selbuf = memcpy(pd->sellist[type].selbuf, buf, len);
- pd->sellist[type].format = format;
-
- //set selection
- pd->sellist[type].set(xwin, &pd, sizeof(&pd));
- sel_debug("data: %p (%d)", &pd, sizeof(&pd));
-
-
- /*switch (type)
- {
- case EFL_SELECTION_TYPE_PRIMARY:
- ecore_x_selection_primary_set(xwin, pd->buf, pd->len);
- break;
- case EFL_SELECTION_TYPE_SECONDARY:
- ecore_x_selection_secondary_set(xwin, pd->buf, pd->len);
- break;
- case EFL_SELECTION_TYPE_DND: //FIXME: Check
- ecore_x_selection_xdnd_set(xwin, pd->buf, pd->len);
- break;
- case EFL_SELECTION_TYPE_CLIPBOARD:
- ecore_x_selection_clipboard_set(xwin, pd->buf, pd->len);
- break;
- default:
- break;
- }*/
-}
-#endif
-
static void
_selection_loss_data_clear_cb(void *data)
{
@@ -563,119 +482,13 @@ _selection_loss_data_clear_cb(void *data)
free(lt);
}
-
-EOLIAN static void
-_efl_selection_manager_selection_set(Eo *obj, Efl_Selection_Manager_Data *pd,
- Efl_Object *owner, Efl_Selection_Type type,
- Efl_Selection_Format format,
- const void *buf, int len, Efl_Input_Device *seat)
-{
- ERR("In");
- if (type > EFL_SELECTION_TYPE_CLIPBOARD)
- {
- ERR("Not supported format: %d", type);
- return;
- }
-
-#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window xwin = _x11_xwin_get(owner);
-#endif
- //check if owner is changed
- if (pd->sel_owner != NULL &&
- pd->sel_owner != owner
-#ifdef HAVE_ELEMENTARY_X
- //support 1 app with multiple window, 1 selection manager
- && pd->xwin == xwin
-#endif
- )
- {
- /*//call selection_loss callback: should we include prev owner??
- Efl_Selection_Type *lt = malloc(sizeof(Efl_Selection_Type));
- *lt = pd->loss_type;
- efl_promise_value_set(pd->promise, lt, _selection_loss_data_clear_cb);*/
-
- efl_event_callback_call(pd->sel_owner, EFL_SELECTION_EVENT_SELECTION_LOSS, NULL);
- }
-
- pd->sel_owner = owner;
- pd->has_sel = EINA_TRUE;
-#ifdef HAVE_ELEMENTARY_X
- pd->xwin = xwin;
-
- return _x11_efl_sel_manager_selection_set(obj, pd, type, format, buf, len, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
-#endif
-#ifdef HAVE_ELEMENTARY_COCOA
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
-#endif
-}
-
-
-EOLIAN static void
-_efl_selection_manager_selection_get(Eo *obj, Efl_Selection_Manager_Data *pd,
- Efl_Object *owner, Efl_Selection_Type type,
- Efl_Selection_Format format,
- void *data_func_data, Efl_Selection_Data_Ready data_func, Eina_Free_Cb data_func_free_cb,
- Efl_Input_Device *seat)
-{
- ERR("In");
- Ecore_X_Window xwin = _x11_xwin_get(obj);
- ERR("xwin: %d", xwin);
- //ecore_x_selection_primary_request(xwin, ECORE_X_SELECTION_TARGET_TARGETS);
- ecore_x_selection_primary_request(xwin, ECORE_X_SELECTION_TARGET_TEXT);
-
- pd->obj = obj;
- pd->data_func_data = data_func_data;
- pd->data_func = data_func;
- pd->data_func_free_cb = data_func_free_cb;
-}
-
-
-EOLIAN static void
-_efl_selection_manager_selection_clear(Eo *obj, Efl_Selection_Manager_Data *pd,
- Efl_Object *owner, Efl_Selection_Type type, Efl_Input_Device *seat)
-{
- //no need to call loss cb here: it will be called from WM
- ERR("In");
- if (type > EFL_SELECTION_TYPE_CLIPBOARD)
- {
- ERR("Not supported type: %d", type);
- return;
- }
- if (pd->sel_owner != owner)
- {
- return;
- }
- if (pd->sellist[type].selbuf)
- {
- free(pd->sellist[type].selbuf);
- pd->sellist[type].selbuf = NULL;
- }
- pd->sel_owner = NULL;
- pd->has_sel = EINA_FALSE;
- if (type == EFL_SELECTION_TYPE_PRIMARY)
- {
- ecore_x_selection_primary_clear();
- }
- else if (type == EFL_SELECTION_TYPE_SECONDARY)
- {
- ecore_x_selection_secondary_clear();
- }
- else if (type == EFL_SELECTION_TYPE_DND)
- {
- }
- else if (type == EFL_SELECTION_TYPE_CLIPBOARD)
- {
- ecore_x_selection_clipboard_clear();
- }
-}
-
static Eina_Bool
_x11_selection_clear(void *data, int type EINA_UNUSED, void *event)
{
Efl_Selection_Manager_Data *pd = data;
+ Ecore_X_Event_Selection_Clear *ev = event;
+ X11_Cnp_Selection *sel;
+ unsigned int i;
ERR("In");
/*if (pd->promise)
{
@@ -684,38 +497,28 @@ _x11_selection_clear(void *data, int type EINA_UNUSED, void *event)
efl_promise_value_set(pd->promise, lt, _selection_loss_data_clear_cb);
pd->promise = NULL;
}*/
- efl_event_callback_call(pd->sel_owner, EFL_SELECTION_EVENT_SELECTION_LOSS, NULL);
- //clear the buffer
- //
-
- return ECORE_CALLBACK_PASS_ON;
-}
-
-/*
-EOLIAN static Efl_Future *
-_efl_selection_manager_selection_loss_feedback(Eo *obj, Efl_Selection_Manager_Data *pd,
- Efl_Object *owner, Efl_Selection_Type type)
-{
- ERR("In");
- Efl_Promise *p;
- Eo *loop = efl_loop_get(obj);
+ for (i = ELM_SEL_TYPE_PRIMARY; i <= ELM_SEL_TYPE_CLIPBOARD; i++)
+ {
+ if (pd->sellist[i].ecore_sel == ev->selection) break;
+ }
+ sel_debug("selection %d clear", i);
+ /* Not me... Don't care */
+ if (i > ELM_SEL_TYPE_CLIPBOARD) return ECORE_CALLBACK_PASS_ON;
- pd->promise = NULL;
- p = efl_add(EFL_PROMISE_CLASS, loop);
- if (!p) return NULL;
- pd->promise = p;
- pd->loss_type = type;
+ sel = pd->sellist + i;
- return efl_promise_future_get(p);
-}*/
+ efl_event_callback_call(sel->owner, EFL_SELECTION_EVENT_SELECTION_LOSS, NULL);
+ sel->owner = NULL;
+ return ECORE_CALLBACK_PASS_ON;
+}
//note: sel_set: data is pd -> converter: data is pd
//->return data from converter: real buffer data ready to paste
-static Elm_Sel_Format
-_get_selection_type(void *data, int size)
+static Efl_Selection_Format
+_get_selection_type(void *data)
{
Efl_Selection_Manager_Data *pd = *(Efl_Selection_Manager_Data **)data;
if (pd->has_sel)
@@ -736,7 +539,7 @@ static Eina_Bool
_x11_general_converter(char *target EINA_UNUSED, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *ttype EINA_UNUSED, int *typesize EINA_UNUSED)
{
Efl_Selection_Manager_Data *pd = *(Efl_Selection_Manager_Data **)data;
- if (_get_selection_type(data, size) == EFL_SELECTION_FORMAT_NONE)
+ if (_get_selection_type(data) == EFL_SELECTION_FORMAT_NONE)
{
//FIXME: Check this case: remove or not
if (data_ret)
@@ -750,8 +553,7 @@ _x11_general_converter(char *target EINA_UNUSED, void *data, int size, void **da
}
else
{
- //_x11_selections + *((int *)data);
- X11_Cnp_Selection *sel = &pd->sellist[pd->active_type];
+ X11_Cnp_Selection *sel = pd->sellist + pd->active_type;
if (sel->selbuf)
{
if (data_ret) *data_ret = strdup(sel->selbuf);
@@ -766,9 +568,8 @@ _x11_general_converter(char *target EINA_UNUSED, void *data, int size, void **da
return EINA_TRUE;
}
-
static Eina_Bool
-_x11_targets_converter(char *target EINA_UNUSED, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *typesize)
+_x11_targets_converter(char *target EINA_UNUSED, void *data, int size EINA_UNUSED, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *typesize)
{
int i, count;
Ecore_X_Atom *aret;
@@ -779,13 +580,13 @@ _x11_targets_converter(char *target EINA_UNUSED, void *data, int size, void **da
Efl_Selection_Manager_Data *pd = *(Efl_Selection_Manager_Data **)data;
seltype = pd->atomlist[pd->active_format].format;
- for (i = CNP_ATOM_LISTING_ATOMS + 1, count = 0; i < SELECTION_N_ATOMS ; i++)
+ for (i = SELECTION_ATOM_LISTING_ATOMS + 1, count = 0; i < SELECTION_N_ATOMS ; i++)
{
if (seltype & pd->atomlist[i].format) count++;
}
aret = malloc(sizeof(Ecore_X_Atom) * count);
if (!aret) return EINA_FALSE;
- for (i = CNP_ATOM_LISTING_ATOMS + 1, count = 0; i < SELECTION_N_ATOMS ; i++)
+ for (i = SELECTION_ATOM_LISTING_ATOMS + 1, count = 0; i < SELECTION_N_ATOMS ; i++)
{
if (seltype & pd->atomlist[i].format)
aret[count ++] = pd->atomlist[i].x_atom;
@@ -826,7 +627,7 @@ _x11_text_converter(char *target, void *data, int size, void **data_ret, int *si
Efl_Selection_Manager_Data *pd = *(Efl_Selection_Manager_Data **)data;
sel_debug("text converter");
- if (_get_selection_type(data, size) == ELM_SEL_FORMAT_NONE)
+ if (_get_selection_type(data) == EFL_SELECTION_FORMAT_NONE)
{
sel_debug("none");
if (data_ret)
@@ -840,7 +641,6 @@ _x11_text_converter(char *target, void *data, int size, void **data_ret, int *si
return EINA_TRUE;
}
//sel = _x11_selections + *((int *)data);
- //if (!sel->active) return EINA_TRUE;
sel = &pd->sellist[pd->active_type];
@@ -881,27 +681,194 @@ _x11_text_converter(char *target, void *data, int size, void **data_ret, int *si
return EINA_TRUE;
}
+#ifdef HAVE_ELEMENTARY_X
+static void
+_x11_efl_sel_manager_selection_set(Eo *obj, Efl_Selection_Manager_Data *pd,
+ Efl_Selection_Type type, Efl_Selection_Format format,
+ const void *buf, int len, Efl_Input_Device *seat)
+{
+ Ecore_X_Window xwin = _x11_xwin_get(obj);
-static Eina_Bool
-_x11_is_uri_type_data(X11_Cnp_Selection *sel EINA_UNUSED, Ecore_X_Event_Selection_Notify *notify)
+ pd->active_type = type;
+ sel_debug("pd active_type: %d, active_format: %d", pd->active_type, pd->active_format);
+ pd->active_format = format;
+ if (pd->sellist[type].selbuf)
+ {
+ free(pd->sellist[type].selbuf);
+ }
+ pd->sellist[type].selbuf = malloc(len);
+ if (!pd->sellist[type].selbuf)
+ {
+ ERR("failed to allocate buf");
+ return;
+ }
+ pd->sellist[type].selbuf = memcpy(pd->sellist[type].selbuf, buf, len);
+ pd->sellist[type].len = len;
+ pd->sellist[type].format = format;
+
+ //set selection
+ pd->sellist[type].set(xwin, &pd, sizeof(&pd));
+ sel_debug("data: %p (%ld)", &pd, sizeof(&pd));
+}
+#endif
+
+EOLIAN static void
+_efl_selection_manager_selection_set(Eo *obj, Efl_Selection_Manager_Data *pd,
+ Efl_Object *owner, Efl_Selection_Type type,
+ Efl_Selection_Format format,
+ const void *buf, int len, Efl_Input_Device *seat)
{
- Ecore_X_Selection_Data *data;
- char *p;
+ ERR("In");
+ if (type > EFL_SELECTION_TYPE_CLIPBOARD)
+ {
+ ERR("Not supported format: %d", type);
+ return;
+ }
+ Eina_Bool same_win = EINA_FALSE;
- data = notify->data;
- sel_debug("data->format is %d %p %p", data->format, notify, data);
- if (data->content == ECORE_X_SELECTION_CONTENT_FILES) return EINA_TRUE;
- p = (char *)data->data;
- if (!p) return EINA_TRUE;
- sel_debug("Got %s", p);
- if (strncmp(p, "file:/", 6))
+#ifdef HAVE_ELEMENTARY_X
+ X11_Cnp_Selection *sel = pd->sellist + type;
+ Ecore_X_Window xwin = _x11_xwin_get(owner);
+ //support 1 app with multiple window, 1 selection manager
+ if (sel->xwin == xwin)
+ same_win = EINA_TRUE;
+#endif
+ //check if owner is changed
+ if (sel->owner != NULL &&
+ sel->owner != owner && same_win)
{
- if (*p != '/') return EINA_FALSE;
+ /*//call selection_loss callback: should we include prev owner??
+ Efl_Selection_Type *lt = malloc(sizeof(Efl_Selection_Type));
+ *lt = pd->loss_type;
+ efl_promise_value_set(pd->promise, lt, _selection_loss_data_clear_cb);*/
+
+ efl_event_callback_call(sel->owner, EFL_SELECTION_EVENT_SELECTION_LOSS, NULL);
}
- return EINA_TRUE;
+
+ sel->owner = owner;
+ pd->has_sel = EINA_TRUE;
+#ifdef HAVE_ELEMENTARY_X
+ sel->xwin = xwin;
+
+ return _x11_efl_sel_manager_selection_set(obj, pd, type, format, buf, len, seat);
+#endif
+#ifdef HAVE_ELEMENTARY_WL2
+#endif
+#ifdef HAVE_ELEMENTARY_COCOA
+#endif
+#ifdef HAVE_ELEMENTARY_WIN32
+#endif
+}
+
+static void
+_x11_efl_sel_manager_selection_get(Eo *obj, Efl_Selection_Manager_Data *pd,
+ Efl_Selection_Type type, Efl_Selection_Format format, Efl_Input_Device *seat)
+{
+ Ecore_X_Window xwin = _x11_xwin_get(obj);
+ ERR("xwin: %d", xwin);
+ //FIXME: use each sel or just pd
+ X11_Cnp_Selection *sel = pd->sellist + type;
+ sel->request_format = format;
+ sel->xwin = xwin;
+
+ if (pd->has_sel)
+ {
+ if (sel->selbuf &&
+ ((format == sel->format) || (xwin == 0)))
+ {
+ sel_debug("use local data");
+ Efl_Selection_Data seldata;
+
+ seldata.data = sel->selbuf;
+ seldata.len = sel->len;
+ seldata.x = seldata.y = 0;
+ seldata.format = sel->format;
+ sel->data_func(sel->data_func_data, sel->request_obj, &seldata);
+ return;
+ }
+ }
+
+ ecore_x_selection_primary_request(xwin, ECORE_X_SELECTION_TARGET_TARGETS);
+}
+
+EOLIAN static void
+_efl_selection_manager_selection_get(Eo *obj, Efl_Selection_Manager_Data *pd,
+ Efl_Object *owner, Efl_Selection_Type type,
+ Efl_Selection_Format format,
+ void *data_func_data, Efl_Selection_Data_Ready data_func, Eina_Free_Cb data_func_free_cb,
+ Efl_Input_Device *seat)
+{
+ ERR("In");
+ X11_Cnp_Selection *sel = pd->sellist + type;
+
+ sel->request_obj = obj;
+ sel->data_func_data = data_func_data;
+ sel->data_func = data_func;
+ sel->data_func_free_cb = data_func_free_cb;
+
+ _x11_efl_sel_manager_selection_get(obj, pd, type, format, seat);
}
+EOLIAN static void
+_efl_selection_manager_selection_clear(Eo *obj, Efl_Selection_Manager_Data *pd,
+ Efl_Object *owner, Efl_Selection_Type type, Efl_Input_Device *seat)
+{
+ ERR("In");
+ Eina_Bool local = EINA_FALSE;
+
+ if (type > EFL_SELECTION_TYPE_CLIPBOARD)
+ {
+ ERR("Not supported type: %d", type);
+ return;
+ }
+ X11_Cnp_Selection *sel = pd->sellist + type;
+ if (sel->owner != owner)
+ {
+ return;
+ }
+ pd->sellist[type].len = 0;
+ if (pd->sellist[type].selbuf)
+ {
+ free(pd->sellist[type].selbuf);
+ pd->sellist[type].selbuf = NULL;
+ }
+#ifdef HAVE_ELEMENTARY_X
+ if (sel->xwin != 0)
+ local = EINA_TRUE;
+#endif
+ if (!local)
+ {
+ pd->sellist[type].clear();
+ }
+ else
+ {
+ efl_event_callback_call(sel->owner, EFL_SELECTION_EVENT_SELECTION_LOSS, NULL);
+ pd->sellist[type].owner = NULL;
+ }
+}
+
+
+/*
+EOLIAN static Efl_Future *
+_efl_selection_manager_selection_loss_feedback(Eo *obj, Efl_Selection_Manager_Data *pd,
+ Efl_Object *owner, Efl_Selection_Type type)
+{
+ ERR("In");
+ Efl_Promise *p;
+ Eo *loop = efl_loop_get(obj);
+
+ pd->promise = NULL;
+ p = efl_add(EFL_PROMISE_CLASS, loop);
+ if (!p) return NULL;
+ pd->promise = p;
+ pd->loss_type = type;
+
+ return efl_promise_future_get(p);
+}*/
+
+
+
static Efl_Object *
_efl_selection_manager_efl_object_constructor(Eo *obj, Efl_Selection_Manager_Data *pd)
{
@@ -913,209 +880,209 @@ _efl_selection_manager_efl_object_constructor(Eo *obj, Efl_Selection_Manager_Dat
ERR("failed to allocate atomlist");
return NULL;
}
- pd->atomlist[CNP_ATOM_TARGETS].name = "TARGETS";
- pd->atomlist[CNP_ATOM_TARGETS].format = ELM_SEL_FORMAT_TARGETS;
+ pd->atomlist[SELECTION_ATOM_TARGETS].name = "TARGETS";
+ pd->atomlist[SELECTION_ATOM_TARGETS].format = EFL_SELECTION_FORMAT_TARGETS;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_TARGETS].x_converter = _x11_targets_converter;
+ pd->atomlist[SELECTION_ATOM_TARGETS].x_converter = _x11_targets_converter;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_TARGETS].wl_converter = _wl_targets_converter;
+ pd->atomlist[SELECTION_ATOM_TARGETS].wl_converter = _wl_targets_converter;
#endif
- pd->atomlist[CNP_ATOM_ATOM].name = "ATOM"; // for opera browser
- pd->atomlist[CNP_ATOM_ATOM].format = ELM_SEL_FORMAT_TARGETS;
+ pd->atomlist[SELECTION_ATOM_ATOM].name = "ATOM"; // for opera browser
+ pd->atomlist[SELECTION_ATOM_ATOM].format = EFL_SELECTION_FORMAT_TARGETS;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_ATOM].x_converter = _x11_targets_converter;
+ pd->atomlist[SELECTION_ATOM_ATOM].x_converter = _x11_targets_converter;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_ATOM].wl_converter = _wl_targets_converter;
+ pd->atomlist[SELECTION_ATOM_ATOM].wl_converter = _wl_targets_converter;
#endif
- pd->atomlist[CNP_ATOM_XELM].name = "application/x-elementary-markup";
- pd->atomlist[CNP_ATOM_XELM].format = ELM_SEL_FORMAT_MARKUP;
+ pd->atomlist[SELECTION_ATOM_XELM].name = "application/x-elementary-markup";
+ pd->atomlist[SELECTION_ATOM_XELM].format = EFL_SELECTION_FORMAT_MARKUP;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_XELM].x_converter = _x11_general_converter;
- pd->atomlist[CNP_ATOM_XELM].x_data_preparer = _x11_data_preparer_markup;
+ pd->atomlist[SELECTION_ATOM_XELM].x_converter = _x11_general_converter;
+ pd->atomlist[SELECTION_ATOM_XELM].x_data_preparer = _x11_data_preparer_markup;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_XELM].wl_converter = _wl_general_converter;
- pd->atomlist[CNP_ATOM_XELM].wl_data_preparer = _wl_data_preparer_markup;
+ pd->atomlist[SELECTION_ATOM_XELM].wl_converter = _wl_general_converter;
+ pd->atomlist[SELECTION_ATOM_XELM].wl_data_preparer = _wl_data_preparer_markup;
#endif
- pd->atomlist[CNP_ATOM_text_urilist].name = "text/uri-list";
- pd->atomlist[CNP_ATOM_text_urilist].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_TEXT_URILIST].name = "text/uri-list";
+ pd->atomlist[SELECTION_ATOM_TEXT_URILIST].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_text_urilist].x_converter = _x11_general_converter;
- pd->atomlist[CNP_ATOM_text_urilist].x_data_preparer = _x11_data_preparer_uri;
+ pd->atomlist[SELECTION_ATOM_TEXT_URILIST].x_converter = _x11_general_converter;
+ pd->atomlist[SELECTION_ATOM_TEXT_URILIST].x_data_preparer = _x11_data_preparer_uri;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_text_urilist].wl_converter = _wl_general_converter;
- pd->atomlist[CNP_ATOM_text_urilist].wl_data_preparer = _wl_data_preparer_uri;
+ pd->atomlist[SELECTION_ATOM_TEXT_URILIST].wl_converter = _wl_general_converter;
+ pd->atomlist[SELECTION_ATOM_TEXT_URILIST].wl_data_preparer = _wl_data_preparer_uri;
#endif
- pd->atomlist[CNP_ATOM_text_x_vcard].name = "text/x-vcard";
- pd->atomlist[CNP_ATOM_text_x_vcard].format = ELM_SEL_FORMAT_VCARD;
+ pd->atomlist[SELECTION_ATOM_TEXT_X_VCARD].name = "text/x-vcard";
+ pd->atomlist[SELECTION_ATOM_TEXT_X_VCARD].format = EFL_SELECTION_FORMAT_VCARD;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_text_x_vcard].x_converter = _x11_vcard_send;
- pd->atomlist[CNP_ATOM_text_x_vcard].x_data_preparer = _x11_data_preparer_vcard;
+ pd->atomlist[SELECTION_ATOM_TEXT_X_VCARD].x_converter = _x11_vcard_send;
+ pd->atomlist[SELECTION_ATOM_TEXT_X_VCARD].x_data_preparer = _x11_data_preparer_vcard;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_text_x_vcard].wl_data_preparer = _wl_data_preparer_vcard;
+ pd->atomlist[SELECTION_ATOM_TEXT_X_VCARD].wl_data_preparer = _wl_data_preparer_vcard;
#endif
- pd->atomlist[CNP_ATOM_image_png].name = "image/png";
- pd->atomlist[CNP_ATOM_image_png].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_IMAGE_PNG].name = "image/png";
+ pd->atomlist[SELECTION_ATOM_IMAGE_PNG].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_image_png].x_converter = _x11_image_converter;
- pd->atomlist[CNP_ATOM_image_png].x_data_preparer = _x11_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_PNG].x_converter = _x11_image_converter;
+ pd->atomlist[SELECTION_ATOM_IMAGE_PNG].x_data_preparer = _x11_data_preparer_image;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_image_png].wl_data_preparer = _wl_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_PNG].wl_data_preparer = _wl_data_preparer_image;
#endif
- pd->atomlist[CNP_ATOM_image_jpeg].name = "image/jpeg";
- pd->atomlist[CNP_ATOM_image_jpeg].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_IMAGE_JPEG].name = "image/jpeg";
+ pd->atomlist[SELECTION_ATOM_IMAGE_JPEG].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_image_jpeg].x_converter = _x11_image_converter;
- pd->atomlist[CNP_ATOM_image_jpeg].x_data_preparer = _x11_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_JPEG].x_converter = _x11_image_converter;
+ pd->atomlist[SELECTION_ATOM_IMAGE_JPEG].x_data_preparer = _x11_data_preparer_image;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_image_jpeg].wl_data_preparer = _wl_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_JPEG].wl_data_preparer = _wl_data_preparer_image;
#endif
- pd->atomlist[CNP_ATOM_image_bmp].name = "image/x-ms-bmp";
- pd->atomlist[CNP_ATOM_image_bmp].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_IMAGE_BMP].name = "image/x-ms-bmp";
+ pd->atomlist[SELECTION_ATOM_IMAGE_BMP].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_image_bmp].x_converter = _x11_image_converter;
- pd->atomlist[CNP_ATOM_image_bmp].x_data_preparer = _x11_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_BMP].x_converter = _x11_image_converter;
+ pd->atomlist[SELECTION_ATOM_IMAGE_BMP].x_data_preparer = _x11_data_preparer_image;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_image_bmp].wl_data_preparer = _wl_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_BMP].wl_data_preparer = _wl_data_preparer_image;
#endif
- pd->atomlist[CNP_ATOM_image_gif].name = "image/gif";
- pd->atomlist[CNP_ATOM_image_gif].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_IMAGE_GIF].name = "image/gif";
+ pd->atomlist[SELECTION_ATOM_IMAGE_GIF].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_image_gif].x_converter = _x11_image_converter;
- pd->atomlist[CNP_ATOM_image_gif].x_data_preparer = _x11_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_GIF].x_converter = _x11_image_converter;
+ pd->atomlist[SELECTION_ATOM_IMAGE_GIF].x_data_preparer = _x11_data_preparer_image;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_image_gif].wl_data_preparer = _wl_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_GIF].wl_data_preparer = _wl_data_preparer_image;
#endif
- pd->atomlist[CNP_ATOM_image_tiff].name = "image/tiff";
- pd->atomlist[CNP_ATOM_image_tiff].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_IMAGE_TIFF].name = "image/tiff";
+ pd->atomlist[SELECTION_ATOM_IMAGE_TIFF].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_image_tiff].x_converter = _x11_image_converter;
- pd->atomlist[CNP_ATOM_image_tiff].x_data_preparer = _x11_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_TIFF].x_converter = _x11_image_converter;
+ pd->atomlist[SELECTION_ATOM_IMAGE_TIFF].x_data_preparer = _x11_data_preparer_image;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_image_tiff].wl_data_preparer = _wl_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_TIFF].wl_data_preparer = _wl_data_preparer_image;
#endif
- pd->atomlist[CNP_ATOM_image_svg].name = "image/svg+xml";
- pd->atomlist[CNP_ATOM_image_svg].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_IMAGE_SVG].name = "image/svg+xml";
+ pd->atomlist[SELECTION_ATOM_IMAGE_SVG].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_image_svg].x_converter = _x11_image_converter;
- pd->atomlist[CNP_ATOM_image_svg].x_data_preparer = _x11_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_SVG].x_converter = _x11_image_converter;
+ pd->atomlist[SELECTION_ATOM_IMAGE_SVG].x_data_preparer = _x11_data_preparer_image;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_image_svg].wl_data_preparer = _wl_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_SVG].wl_data_preparer = _wl_data_preparer_image;
#endif
- pd->atomlist[CNP_ATOM_image_xpm].name = "image/x-xpixmap";
- pd->atomlist[CNP_ATOM_image_xpm].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_IMAGE_XPM].name = "image/x-xpixmap";
+ pd->atomlist[SELECTION_ATOM_IMAGE_XPM].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_image_xpm].x_converter = _x11_image_converter;
- pd->atomlist[CNP_ATOM_image_xpm].x_data_preparer = _x11_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_XPM].x_converter = _x11_image_converter;
+ pd->atomlist[SELECTION_ATOM_IMAGE_XPM].x_data_preparer = _x11_data_preparer_image;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_image_xpm].wl_data_preparer = _wl_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_XPM].wl_data_preparer = _wl_data_preparer_image;
#endif
- pd->atomlist[CNP_ATOM_image_tga].name = "image/x-tga";
- pd->atomlist[CNP_ATOM_image_tga].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_IMAGE_TGA].name = "image/x-tga";
+ pd->atomlist[SELECTION_ATOM_IMAGE_TGA].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_image_tga].x_converter = _x11_image_converter;
- pd->atomlist[CNP_ATOM_image_tga].x_data_preparer = _x11_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_TGA].x_converter = _x11_image_converter;
+ pd->atomlist[SELECTION_ATOM_IMAGE_TGA].x_data_preparer = _x11_data_preparer_image;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_image_tga].wl_data_preparer = _wl_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_TGA].wl_data_preparer = _wl_data_preparer_image;
#endif
- pd->atomlist[CNP_ATOM_image_ppm].name = "image/x-portable-pixmap";
- pd->atomlist[CNP_ATOM_image_ppm].format = ELM_SEL_FORMAT_IMAGE;
+ pd->atomlist[SELECTION_ATOM_IMAGE_PPM].name = "image/x-portable-pixmap";
+ pd->atomlist[SELECTION_ATOM_IMAGE_PPM].format = EFL_SELECTION_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_image_ppm].x_converter = _x11_image_converter;
- pd->atomlist[CNP_ATOM_image_ppm].x_data_preparer = _x11_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_PPM].x_converter = _x11_image_converter;
+ pd->atomlist[SELECTION_ATOM_IMAGE_PPM].x_data_preparer = _x11_data_preparer_image;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_image_ppm].wl_data_preparer = _wl_data_preparer_image;
+ pd->atomlist[SELECTION_ATOM_IMAGE_PPM].wl_data_preparer = _wl_data_preparer_image;
#endif
- pd->atomlist[CNP_ATOM_UTF8STRING].name = "UTF8_STRING";
- pd->atomlist[CNP_ATOM_UTF8STRING].format = ELM_SEL_FORMAT_TEXT | ELM_SEL_FORMAT_MARKUP | ELM_SEL_FORMAT_HTML;
+ pd->atomlist[SELECTION_ATOM_UTF8STRING].name = "UTF8_STRING";
+ pd->atomlist[SELECTION_ATOM_UTF8STRING].format = EFL_SELECTION_FORMAT_TEXT | EFL_SELECTION_FORMAT_MARKUP | EFL_SELECTION_FORMAT_HTML;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_UTF8STRING].x_converter = _x11_text_converter;
- pd->atomlist[CNP_ATOM_UTF8STRING].x_data_preparer = _x11_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_UTF8STRING].x_converter = _x11_text_converter;
+ pd->atomlist[SELECTION_ATOM_UTF8STRING].x_data_preparer = _x11_data_preparer_text;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_UTF8STRING].wl_converter = _wl_text_converter;
- pd->atomlist[CNP_ATOM_UTF8STRING].wl_data_preparer = _wl_data_preparer_text,
+ pd->atomlist[SELECTION_ATOM_UTF8STRING].wl_converter = _wl_text_converter;
+ pd->atomlist[SELECTION_ATOM_UTF8STRING].wl_data_preparer = _wl_data_preparer_text,
#endif
- pd->atomlist[CNP_ATOM_STRING].name = "STRING";
- pd->atomlist[CNP_ATOM_STRING].format = ELM_SEL_FORMAT_TEXT | ELM_SEL_FORMAT_MARKUP | ELM_SEL_FORMAT_HTML;
+ pd->atomlist[SELECTION_ATOM_STRING].name = "STRING";
+ pd->atomlist[SELECTION_ATOM_STRING].format = EFL_SELECTION_FORMAT_TEXT | EFL_SELECTION_FORMAT_MARKUP | EFL_SELECTION_FORMAT_HTML;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_STRING].x_converter = _x11_text_converter;
- pd->atomlist[CNP_ATOM_STRING].x_data_preparer = _x11_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_STRING].x_converter = _x11_text_converter;
+ pd->atomlist[SELECTION_ATOM_STRING].x_data_preparer = _x11_data_preparer_text;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_STRING].wl_converter = _wl_text_converter;
- pd->atomlist[CNP_ATOM_STRING].wl_data_preparer = _wl_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_STRING].wl_converter = _wl_text_converter;
+ pd->atomlist[SELECTION_ATOM_STRING].wl_data_preparer = _wl_data_preparer_text;
#endif
- pd->atomlist[CNP_ATOM_COMPOUND_TEXT].name = "COMPOUND_TEXT";
- pd->atomlist[CNP_ATOM_COMPOUND_TEXT].format = ELM_SEL_FORMAT_TEXT | ELM_SEL_FORMAT_MARKUP | ELM_SEL_FORMAT_HTML;
+ pd->atomlist[SELECTION_ATOM_COMPOUND_TEXT].name = "COMPOUND_TEXT";
+ pd->atomlist[SELECTION_ATOM_COMPOUND_TEXT].format = EFL_SELECTION_FORMAT_TEXT | EFL_SELECTION_FORMAT_MARKUP | EFL_SELECTION_FORMAT_HTML;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_COMPOUND_TEXT].x_converter = _x11_text_converter;
- pd->atomlist[CNP_ATOM_COMPOUND_TEXT].x_data_preparer = _x11_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_COMPOUND_TEXT].x_converter = _x11_text_converter;
+ pd->atomlist[SELECTION_ATOM_COMPOUND_TEXT].x_data_preparer = _x11_data_preparer_text;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_COMPOUND_TEXT].wl_converter = _wl_text_converter;
- pd->atomlist[CNP_ATOM_COMPOUND_TEXT].wl_data_preparer = _wl_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_COMPOUND_TEXT].wl_converter = _wl_text_converter;
+ pd->atomlist[SELECTION_ATOM_COMPOUND_TEXT].wl_data_preparer = _wl_data_preparer_text;
#endif
- pd->atomlist[CNP_ATOM_TEXT].name = "TEXT";
- pd->atomlist[CNP_ATOM_TEXT].format = ELM_SEL_FORMAT_TEXT | ELM_SEL_FORMAT_MARKUP | ELM_SEL_FORMAT_HTML;
+ pd->atomlist[SELECTION_ATOM_TEXT].name = "TEXT";
+ pd->atomlist[SELECTION_ATOM_TEXT].format = EFL_SELECTION_FORMAT_TEXT | EFL_SELECTION_FORMAT_MARKUP | EFL_SELECTION_FORMAT_HTML;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_TEXT].x_converter = _x11_text_converter;
- pd->atomlist[CNP_ATOM_TEXT].x_data_preparer = _x11_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_TEXT].x_converter = _x11_text_converter;
+ pd->atomlist[SELECTION_ATOM_TEXT].x_data_preparer = _x11_data_preparer_text;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_TEXT].wl_converter = _wl_text_converter;
- pd->atomlist[CNP_ATOM_TEXT].wl_data_preparer = _wl_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_TEXT].wl_converter = _wl_text_converter;
+ pd->atomlist[SELECTION_ATOM_TEXT].wl_data_preparer = _wl_data_preparer_text;
#endif
- pd->atomlist[CNP_ATOM_text_plain_utf8].name = "text/plain;charset=utf-8";
- pd->atomlist[CNP_ATOM_text_plain_utf8].format = ELM_SEL_FORMAT_TEXT | ELM_SEL_FORMAT_MARKUP | ELM_SEL_FORMAT_HTML;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN_UTF8].name = "text/plain;charset=utf-8";
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN_UTF8].format = EFL_SELECTION_FORMAT_TEXT | EFL_SELECTION_FORMAT_MARKUP | EFL_SELECTION_FORMAT_HTML;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_text_plain_utf8].x_converter = _x11_text_converter;
- pd->atomlist[CNP_ATOM_text_plain_utf8].x_data_preparer = _x11_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN_UTF8].x_converter = _x11_text_converter;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN_UTF8].x_data_preparer = _x11_data_preparer_text;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_text_plain_utf8].wl_converter = _wl_text_converter;
- pd->atomlist[CNP_ATOM_text_plain_utf8].wl_data_preparer = _wl_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN_UTF8].wl_converter = _wl_text_converter;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN_UTF8].wl_data_preparer = _wl_data_preparer_text;
#endif
- pd->atomlist[CNP_ATOM_text_plain].name = "text/plain";
- pd->atomlist[CNP_ATOM_text_plain].format = ELM_SEL_FORMAT_TEXT | ELM_SEL_FORMAT_MARKUP | ELM_SEL_FORMAT_HTML;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN].name = "text/plain";
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN].format = EFL_SELECTION_FORMAT_TEXT | EFL_SELECTION_FORMAT_MARKUP | EFL_SELECTION_FORMAT_HTML;
#ifdef HAVE_ELEMENTARY_X
- pd->atomlist[CNP_ATOM_text_plain].x_converter = _x11_text_converter;
- pd->atomlist[CNP_ATOM_text_plain].x_data_preparer = _x11_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN].x_converter = _x11_text_converter;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN].x_data_preparer = _x11_data_preparer_text;
#endif
#ifdef HAVE_ELEMENTARY_WL2
- pd->atomlist[CNP_ATOM_text_plain].wl_converter = _wl_text_converter;
- pd->atomlist[CNP_ATOM_text_plain].wl_data_preparer = _wl_data_preparer_text;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN].wl_converter = _wl_text_converter;
+ pd->atomlist[SELECTION_ATOM_TEXT_PLAIN].wl_data_preparer = _wl_data_preparer_text;
#endif
diff --git a/src/lib/elementary/efl_selection_manager_private.h b/src/lib/elementary/efl_selection_manager_private.h
index b1e7409fed..28f15ffbc7 100644
--- a/src/lib/elementary/efl_selection_manager_private.h
+++ b/src/lib/elementary/efl_selection_manager_private.h
@@ -10,29 +10,27 @@
enum
{
- CNP_ATOM_TARGETS = 0,
- CNP_ATOM_ATOM,
- CNP_ATOM_LISTING_ATOMS = CNP_ATOM_ATOM,
- CNP_ATOM_text_urilist,
- CNP_ATOM_text_x_vcard,
- CNP_ATOM_image_png,
- CNP_ATOM_image_jpeg,
- CNP_ATOM_image_bmp,
- CNP_ATOM_image_gif,
- CNP_ATOM_image_tiff,
- CNP_ATOM_image_svg,
- CNP_ATOM_image_xpm,
- CNP_ATOM_image_tga,
- CNP_ATOM_image_ppm,
- CNP_ATOM_XELM,
-// CNP_ATOM_text_html_utf8,
-// CNP_ATOM_text_html,
- CNP_ATOM_UTF8STRING,
- CNP_ATOM_STRING,
- CNP_ATOM_COMPOUND_TEXT,
- CNP_ATOM_TEXT,
- CNP_ATOM_text_plain_utf8,
- CNP_ATOM_text_plain,
+ SELECTION_ATOM_TARGETS = 0,
+ SELECTION_ATOM_ATOM,
+ SELECTION_ATOM_LISTING_ATOMS = SELECTION_ATOM_ATOM,
+ SELECTION_ATOM_TEXT_URILIST,
+ SELECTION_ATOM_TEXT_X_VCARD,
+ SELECTION_ATOM_IMAGE_PNG,
+ SELECTION_ATOM_IMAGE_JPEG,
+ SELECTION_ATOM_IMAGE_BMP,
+ SELECTION_ATOM_IMAGE_GIF,
+ SELECTION_ATOM_IMAGE_TIFF,
+ SELECTION_ATOM_IMAGE_SVG,
+ SELECTION_ATOM_IMAGE_XPM,
+ SELECTION_ATOM_IMAGE_TGA,
+ SELECTION_ATOM_IMAGE_PPM,
+ SELECTION_ATOM_XELM,
+ SELECTION_ATOM_UTF8STRING,
+ SELECTION_ATOM_STRING,
+ SELECTION_ATOM_COMPOUND_TEXT,
+ SELECTION_ATOM_TEXT,
+ SELECTION_ATOM_TEXT_PLAIN_UTF8,
+ SELECTION_ATOM_TEXT_PLAIN,
SELECTION_N_ATOMS,
};
@@ -72,9 +70,8 @@ struct _X11_Cnp_Selection
const char *debug;
Evas_Object *widget;
char *selbuf;
- Evas_Object *requestwidget;
- void *udata;
- Efl_Selection_Format requestformat;
+ unsigned int len;
+ Efl_Selection_Format request_format;
//Elm_Drop_Cb datacb;
Eina_Bool (*set) (Ecore_X_Window, const void *data, int size);
Eina_Bool (*clear) (void);
@@ -87,14 +84,19 @@ struct _X11_Cnp_Selection
Ecore_X_Window xwin;
//Elm_Xdnd_Action action;
- Eina_Bool active : 1;
+ Eo *owner;
+
+ Eo *request_obj;
+ void *data_func_data;
+ Efl_Selection_Data_Ready data_func;
+ Eina_Free_Cb data_func_free_cb;
};
struct _Efl_Selection_Manager_Atom
{
- const char *name;
- Ecore_X_Atom x_atom;
+ const char *name;
+ Ecore_X_Atom x_atom;
};
struct _Efl_Sel_Manager_Atom
@@ -119,32 +121,22 @@ struct _Efl_Sel_Manager_Atom
struct _Efl_Selection_Manager_Data
{
- Eo *obj;
- Ecore_Event_Handler *notify_handler;
- Ecore_Event_Handler *clear_handler;
- Efl_Promise *promise;
- Efl_Selection_Type loss_type;
+ Ecore_Event_Handler *notify_handler;
+ Ecore_Event_Handler *clear_handler;
+ Efl_Promise *promise;
+ Efl_Selection_Type loss_type;
#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window *xwin;
#endif
- void *data_func_data;
- Efl_Selection_Data_Ready data_func;
- Eina_Free_Cb data_func_free_cb;
-
- Eina_Bool has_sel;
- Efl_Selection_Type active_type;
- Efl_Selection_Format active_format;
- Efl_Selection_Manager_Atom atom;
- void *buf;
- int len;
-
- Eo *sel_owner;
+ Eina_Bool has_sel;
+ Efl_Selection_Type active_type;
+ Efl_Selection_Format active_format;
+ Efl_Selection_Manager_Atom atom;
- Efl_Sel_Manager_Atom *atomlist;
- //Efl_Sel_Manager_Selection *sellist;
- X11_Cnp_Selection *sellist;
- Saved_Type *savedtypes;
+ Efl_Sel_Manager_Atom *atomlist;
+ //Efl_Sel_Manager_Selection *sellist;
+ X11_Cnp_Selection *sellist;
+ Saved_Type *savedtypes;
};
#endif