Entry: add markup cnp handlers

In Elm_Cnp, a markup data preparer was missing, which resulted
in _x11_notify_handler_targets not requesting
"application/x-elementary-markup" (requested "UTF8_STRING" instead) when
trying to paste markup text from one entry to another (or itself).

Also, there was a missing handling in the selection data callback for
ELM_SEL_FORMAT_MARKUP data format.

This fixes issues like not being able to paste "item" formats to the
entry widget.

@fix
This commit is contained in:
Daniel Hirt 2015-11-30 15:29:06 +02:00
parent bc05cd81bd
commit a77cee43d3
2 changed files with 17 additions and 0 deletions

View File

@ -218,6 +218,7 @@ static Eina_Bool _x11_vcard_send (char *target, void *data, i
static Eina_Bool _x11_is_uri_type_data (X11_Cnp_Selection *sel EINA_UNUSED, Ecore_X_Event_Selection_Notify *notify);
static Eina_Bool _x11_notify_handler_targets (X11_Cnp_Selection *sel, Ecore_X_Event_Selection_Notify *notify);
static Eina_Bool _x11_data_preparer_text (Ecore_X_Event_Selection_Notify *notify, Elm_Selection_Data *ddata, Tmp_Info **tmp_info);
static Eina_Bool _x11_data_preparer_markup (Ecore_X_Event_Selection_Notify *notify, Elm_Selection_Data *ddata, Tmp_Info **tmp_info);
static Eina_Bool _x11_data_preparer_image (Ecore_X_Event_Selection_Notify *notify, Elm_Selection_Data *ddata, Tmp_Info **tmp_info);
static Eina_Bool _x11_data_preparer_uri (Ecore_X_Event_Selection_Notify *notify, Elm_Selection_Data *ddata, Tmp_Info **tmp_info);
//static int _x11_notify_handler_html (X11_Cnp_Selection *sel, Ecore_X_Event_Selection_Notify *notify);
@ -451,6 +452,7 @@ static Cnp_Atom _atoms[CNP_N_ATOMS] = {
.formats = ELM_SEL_FORMAT_MARKUP,
#ifdef HAVE_ELEMENTARY_X
.x_converter = _x11_general_converter,
.x_data_preparer = _x11_data_preparer_markup,
#endif
},
ARRAYINIT(CNP_ATOM_text_urilist) {
@ -956,6 +958,17 @@ _x11_data_preparer_text(Ecore_X_Event_Selection_Notify *notify,
return EINA_TRUE;
}
static Eina_Bool
_x11_data_preparer_markup(Ecore_X_Event_Selection_Notify *notify,
Elm_Selection_Data *ddata, Tmp_Info **tmp_info EINA_UNUSED)
{
Ecore_X_Selection_Data *data = notify->data;
ddata->format = ELM_SEL_FORMAT_MARKUP;
ddata->data = eina_memdup(data->data, data->length, EINA_TRUE);
ddata->len = data->length;
return EINA_TRUE;
}
/**
* So someone is pasting an image into my entry or widget...
*/

View File

@ -673,6 +673,10 @@ _selection_data_cb(void *data EINA_UNUSED,
snprintf(entry_tag, len + 1, tag_string, buf);
_edje_entry_user_insert(obj, entry_tag);
}
else if (sel_data->format & ELM_SEL_FORMAT_MARKUP)
{
_edje_entry_user_insert(obj, buf);
}
else
{
char *txt = _elm_util_text_to_mkup(buf);