From: Thiep Ha Date: Fri, 29 Jul 2016 01:26:54 +0000 (+0900) Subject: cnp: add types support for windows X-Git-Tag: accepted/tizen/common/20160826.142851~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F63%2F85463%2F1;p=platform%2Fupstream%2Felementary.git cnp: add types support for windows Change-Id: I44708422c49ffa774cf02f739caa48062984316a Signed-off-by: Thiep Ha --- diff --git a/src/lib/elm_cnp.c b/src/lib/elm_cnp.c index b933058..784bd45 100644 --- a/src/lib/elm_cnp.c +++ b/src/lib/elm_cnp.c @@ -4880,9 +4880,10 @@ struct _Win32_Cnp_Selection void *udata; Elm_Sel_Format requestformat; Elm_Drop_Cb datacb; - Eina_Bool (*set)(const Ecore_Win32_Window *window, const void *data, int size); + Eina_Bool (*set)(const Ecore_Win32_Window *window, Ecore_Win32_Selection_Format format, const void *data, int size); + //Eina_Bool (*set)(const Ecore_Win32_Window *window, const void *data, int size); Eina_Bool (*clear)(const Ecore_Win32_Window *window); - Eina_Bool (*get)(const Ecore_Win32_Window *window , void **data, int *size); + Eina_Bool (*get)(const Ecore_Win32_Window *window, Ecore_Win32_Selection_Format format, void **data, int *size); Elm_Selection_Loss_Cb loss_cb; void *loss_data; @@ -5001,10 +5002,60 @@ _win32_elm_widget_window_get(const Evas_Object *obj) return win; } +static void +_win32_elm_cnp_converter_cb(void *udata, Ecore_Win32_Selection_Format format, void **data, int *length) +{ + Win32_Cnp_Selection *sel = udata; + if (!data) + { + DBG("returned data is not set"); + return; + } + + DBG("In"); + if (sel->selbuf) + { + DBG("Has selbuf: '%s'", sel->selbuf); + int len = strlen(sel->selbuf); + char *formated_data = NULL; + if (format == ECORE_WIN32_SELECTION_FORMAT_TEXT) + { + char *str = calloc(1, len + 1); + strncpy(str, sel->selbuf, len); + formated_data = _elm_util_mkup_to_text(str); + DBG("Format: text"); + } + else if (format == ECORE_WIN32_SELECTION_FORMAT_UNICODE_TEXT) + { + formated_data = calloc(1, len + 1); + strncpy(formated_data, sel->selbuf, len); + DBG("format: unicode text"); + } + else + { + formated_data = calloc(1, len + 1); + strncpy(formated_data, sel->selbuf, len); + DBG("Format: other"); + } + + int flen = strlen(formated_data); + *data = calloc(1, flen + 1); + strncpy(*data, formated_data, flen); + DBG("Set data: '%s'", (char *)formated_data); + + if (length) + { + *length = flen; + } + free(formated_data); + } +} + static Eina_Bool _win32_elm_cnp_selection_set(Ecore_Win32_Window *win, Evas_Object *obj, Elm_Sel_Type selection, Elm_Sel_Format format, const void *selbuf, size_t buflen) { Win32_Cnp_Selection *sel; + Ecore_Win32_Selection_Format ecore_format; if (selection != ELM_SEL_TYPE_CLIPBOARD) return EINA_FALSE; @@ -5021,11 +5072,50 @@ _win32_elm_cnp_selection_set(Ecore_Win32_Window *win, Evas_Object *obj, Elm_Sel_ sel->active = EINA_TRUE; sel->widget = obj; sel->win = win; - if (sel->set) sel->set(win, selbuf, buflen); + //if (sel->set) sel->set(win, selbuf, buflen); + ecore_format = ECORE_WIN32_SELECTION_FORMAT_TEXT; + if (format == ELM_SEL_FORMAT_TARGETS) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_MARKUP; + DBG("Set Format: TARGETS: Markup"); + } + else if (format & ELM_SEL_FORMAT_TEXT) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_TEXT; + DBG("Set Format: Text"); + } + else if (format & ELM_SEL_FORMAT_MARKUP) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_MARKUP; + DBG("Set Format: Markup"); + } + else if (format & ELM_SEL_FORMAT_IMAGE) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_DIB; + DBG("Set Format: Dib"); + } + else if (format & ELM_SEL_FORMAT_VCARD) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_VCARD; + DBG("Set Format: Vcard"); + } + else if (format & ELM_SEL_FORMAT_HTML) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_HTML; + DBG("Set Format: Html"); + } + else + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_TEXT; + DBG("Set Format: Other: Text"); + } + if (sel->set) sel->set(win, ecore_format, selbuf, buflen); sel->format = format; sel->loss_cb = NULL; sel->loss_data = NULL; + ecore_win32_clipboard_converter_add(win, _win32_elm_cnp_converter_cb, sel); + evas_object_event_callback_add (sel->widget, EVAS_CALLBACK_DEL, _win32_sel_obj_del, sel); @@ -5110,6 +5200,7 @@ _win32_elm_cnp_selection_get(Ecore_Win32_Window *win, Win32_Cnp_Selection *sel; void *data; int size; + Ecore_Win32_Selection_Format ecore_format; if (selection != ELM_SEL_TYPE_CLIPBOARD) return EINA_FALSE; @@ -5121,17 +5212,55 @@ _win32_elm_cnp_selection_get(Ecore_Win32_Window *win, if (sel->requestwidget) evas_object_event_callback_del_full(sel->requestwidget, EVAS_CALLBACK_DEL, _win32_sel_obj_del2, sel); + + ecore_format = ECORE_WIN32_SELECTION_FORMAT_TEXT; + if (format == ELM_SEL_FORMAT_TARGETS) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_MARKUP; + DBG("Get Format: TARGETS: Markup"); + } + else if (format & ELM_SEL_FORMAT_TEXT) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_TEXT; + DBG("Get Format: Text"); + } + else if (format & ELM_SEL_FORMAT_MARKUP) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_MARKUP; + DBG("Get Format: Markup"); + } + else if (format & ELM_SEL_FORMAT_IMAGE) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_DIB; + DBG("Get Format: Dib"); + } + else if (format & ELM_SEL_FORMAT_VCARD) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_VCARD; + DBG("Get Format: Vcard"); + } + else if (format & ELM_SEL_FORMAT_HTML) + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_HTML; + DBG("Get Format: Html"); + } + else + { + ecore_format = ECORE_WIN32_SELECTION_FORMAT_TEXT; + DBG("Get Format: Other: Text"); + } sel->requestformat = format; sel->requestwidget = (Evas_Object *)obj; sel->win = win; - sel->get(win, &data, &size); + sel->get(win, ecore_format, &data, &size); sel->datacb = datacb; sel->udata = udata; if (!data || (size <= 0)) goto cb_add; - if ((sel->format & ELM_SEL_FORMAT_MARKUP) || + DBG("Got: %s", (char *)data); + /*if ((sel->format & ELM_SEL_FORMAT_MARKUP) || (sel->format & ELM_SEL_FORMAT_HTML)) { char *str; @@ -5153,7 +5282,7 @@ _win32_elm_cnp_selection_get(Ecore_Win32_Window *win, free(data); data = NULL; } - } + }*/ if (sel->datacb && data && (size > 0)) {