/* Optimisation: Turn this into a 256 byte table:
* then can lookup in one index, not N checks */
static const Escape escapes[] = {
- { "<br>", '\n' },
- { "<ps>", '\n' },
- { "<\t>", '\t' },
- { "gt;", '>' },
- { "lt;", '<' },
- { "amp;", '&' },
- { "quot;", '\'' },
- { "dquot;", '"' }
+ { "<br>", '\n' },
+ { "<ps>", '\n' },
+ { "<\t>", '\t' },
+ { "gt;", '>' },
+ { "lt;", '<' },
+ { "amp;", '&' },
+ { "quot;", '\'' },
+ { "dquot;", '"' }
};
#define N_ESCAPES ((int)(sizeof(escapes) / sizeof(escapes[0])))
char *valueEnd = strchr(value, '\0');
int i;
- for (i = 0; i < spCnt; i++)
+ int start = 0;
+ if ((!strncmp(tag_str, "<item", 5) && !strcmp(tag_name, "href")) // EFL img tag
+ || (!strncmp(tag_str, "<img", 4) && !strcmp(tag_name, "src"))) // HTML img tag
+ start = 1;
+
+ for (i = start; i < spCnt; i++)
{
if (spArray[i] && spArray[i] < valueEnd)
valueEnd = spArray[i];
if (path)
{
char *modify = malloc(sizeof(char) * (strlen(value) + 1));
- strncpy(modify, "file://", 7);
- modify[7] = '\0';
+ strncpy(modify, "file://", 8);
path += 7;
while (path[1] && path[0] && path[1] == '/' && path[0] == '/')
{
if (path)
{
char *modify = malloc(sizeof(char) * (strlen(value) + 1));
- strncpy(modify, "file://", 7);
- modify[7] = '\0';
+ strncpy(modify, "file://", 8);
path += 7;
while (path[1] && path[0] && path[1] == '/' && path[0] == '/')
{
}
Eina_Bool
+elm_selection_selection_has_owner(void)
+{
+#ifdef HAVE_ELEMENTARY_X
+ return !!ecore_x_selection_owner_get(clipboard_atom);
+#else
+ return EINA_FALSE;
+#endif
+}
+
+Eina_Bool
elm_selection_set(Elm_Sel_Type selection, Evas_Object *widget, Elm_Sel_Format format, const char *selbuf)
{
#ifdef HAVE_ELEMENTARY_X
cnp_debug("Got %s\n", p);
if (strncmp(p, "file://", 7))
{
- /* elm_selection_set send target notify->data just "x" */
- if (*p == 'x') return EINA_TRUE;
if (*p != '/') return EINA_FALSE;
}
{
if ((atoms[j].atom == atomlist[i]) && (atoms[j].notify))
{
+#if 0
if ((j == CNP_ATOM_text_uri) ||
(j == CNP_ATOM_text_urilist))
{
if(!is_uri_type_data(sel, notify)) continue;
}
+#endif
cnp_debug("Atom %s matches\n",atoms[j].name);
goto done;
}
if (!startTag)
startTag = strstr(insertStr, "</item");
if (startTag)
- endTag = strstr(insertStr, ">");
+ endTag = strstr(startTag, ">");
else
break;
if (!endTag || startTag > endTag)
Ecore_X_Selection_Data *data;
Ecore_X_Selection_Data_Files *files;
Paste_Image *pi;
- char *p;
+ char *p, *stripstr;
data = notify->data;
cnp_debug("data->format is %d %p %p\n", data->format, notify, data);
cnp_debug("more then one file: Bailing\n");
return 0;
}
- p = files->files[0];
+ stripstr = p = strdup(files->files[0]);
}
else
{
- p = (char *)data->data;
+ stripstr = p = strndup((char *)data->data, data->length);
}
if (!p)
ddata.data = p;
ddata.len = data->length;
sel->datacb(sel->udata, sel->widget, &ddata);
+ free(p);
return 0;
}
if (strncmp(p, "file://", 7))
{
/* Try and continue if it looks sane */
- if (*p != '/') return 0;
+ if (*p != '/')
+ {
+ free(p);
+ return 0;
+ }
}
else
{
pasteimage_append(pi, sel->requestwidget);
savedtypes.pi = NULL;
}
+ free(stripstr);
return 0;
}
if (edje)
*data_ret = edje;
else
- *data_ret = strdup(sel->selbuf);
+ if (sel->selbuf)
+ *data_ret = strdup(sel->selbuf);
+ else
+ *data_ret = strdup("");
}
if (size_ret)
{
if (edje)
*size_ret = strlen(edje);
else
- *size_ret = strlen(sel->selbuf);
+ if (sel->selbuf)
+ *size_ret = strlen(sel->selbuf);
+ else
+ *size_ret = 0;
}
return EINA_TRUE;
if (html)
*data_ret = html;
else
- *data_ret = strdup(sel->selbuf);
+ if (sel->selbuf)
+ *data_ret = strdup(sel->selbuf);
+ else
+ *data_ret = strdup("");
}
if (size_ret)
if (html)
*size_ret = strlen(html);
else
- *size_ret = strlen(sel->selbuf);
+ if (sel->selbuf)
+ *size_ret = strlen(sel->selbuf);
+ else
+ *size_ret = 0;
}
if (convert_target != sel->selbuf)
free(convert_target);
tmppath = getenv("TMP");
if (!tmppath) tmppath = P_tmpdir;
- if (!tmppath) tmppath = "/tmp";
len = snprintf(NULL, 0, "%s/%sXXXXXX", tmppath, "elmcnpitem-");
if (len < 0)
{