EAPI void ecore_x_selection_secondary_request(Ecore_X_Window w, const char *target);
EAPI void ecore_x_selection_xdnd_request(Ecore_X_Window w, const char *target);
EAPI void ecore_x_selection_clipboard_request(Ecore_X_Window w, const char *target);
-EAPI int ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target, void **data_ret);
-EAPI void ecore_x_selection_converter_add(char *target, int (*func)(char *target, void *data, int size, void **data_ret, int *size_ret));
-EAPI void ecore_x_selection_converter_atom_add(Ecore_X_Atom target, int (*func)(char *target, void *data, int size, void **data_ret, int *size_ret));
+EAPI int ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target, void **data_ret, int *len, Ecore_X_Atom *targprop, int *targsize);
+EAPI void ecore_x_selection_converter_add(char *target, int (*func)(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *, int *));
+EAPI void ecore_x_selection_converter_atom_add(Ecore_X_Atom target, int (*func)(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *tprop, int *tsize));
EAPI void ecore_x_selection_converter_del(char *target);
EAPI void ecore_x_selection_converter_atom_del(Ecore_X_Atom target);
EAPI void ecore_x_selection_parser_add(const char *target, void *(*func)(const char *target, void *data, int size, int format));
struct _Ecore_X_Selection_Converter
{
Ecore_X_Atom target;
- int (*convert)(char *target, void *data, int size,
- void **data_ret, int *size_ret);
+ int (*convert)(char *target, void *data, int size,
+ void **data_ret, int *size_ret,
+ Ecore_X_Atom *type, int *typeseize);
Ecore_X_Selection_Converter *next;
};
Ecore_X_Selection_Intern *
_ecore_x_selection_get(Ecore_X_Atom selection);
int _ecore_x_selection_set(Window w, const void *data, int len, Ecore_X_Atom selection);
-int _ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target, void **data_ret);
+int _ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target, void **data_ret, Ecore_X_Atom *targettype, int *targetsize);
void *_ecore_x_selection_parse(const char *target, void *data, int size, int format);
void _ecore_x_sync_magic_send(int val, Ecore_X_Window swin);
void _ecore_x_input_init(void);
void _ecore_x_input_shutdown(void);
-void _ecore_x_input_handler(XEvent* xevent);
+void _ecore_x_input_handler(XEvent* xevent);
/* from sync */
void _ecore_mouse_move(unsigned int timestamp, unsigned int xmodifiers, int x, int y, int x_root, int y_root, unsigned int event_window, unsigned int window, unsigned int root_win, int same_screen, int dev, double radx, double rady, double pressure, double angle, double mx, double my, double mrx, double mry);
static Ecore_X_Selection_Converter *converters = NULL;
static Ecore_X_Selection_Parser *parsers = NULL;
-static int _ecore_x_selection_converter_text(char *target, void *data, int size, void **data_ret, int *size_ret);
+static int _ecore_x_selection_converter_text(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *tprop, int *);
static int _ecore_x_selection_data_default_free(void *data);
static void *_ecore_x_selection_parser_files(const char *target, void *data, int size, int format);
static int _ecore_x_selection_data_files_free(void *data);
memset(selections, 0, sizeof(selections));
/* Initialize converters */
- ecore_x_selection_converter_atom_add(ECORE_X_ATOM_TEXT,
+ ecore_x_selection_converter_atom_add(ECORE_X_ATOM_TEXT,
_ecore_x_selection_converter_text);
#ifdef X_HAVE_UTF8_STRING
- ecore_x_selection_converter_atom_add(ECORE_X_ATOM_UTF8_STRING,
+ ecore_x_selection_converter_atom_add(ECORE_X_ATOM_UTF8_STRING,
_ecore_x_selection_converter_text);
#endif
ecore_x_selection_converter_atom_add(ECORE_X_ATOM_COMPOUND_TEXT,
return NULL;
}
-int
+int
_ecore_x_selection_set(Window w, const void *data, int size, Ecore_X_Atom selection)
{
int in;
unsigned char *buf = NULL;
-
+
XSetSelectionOwner(_ecore_x_disp, selection, w, _ecore_x_event_last_time);
if (XGetSelectionOwner(_ecore_x_disp, selection) != w)
return 0;
-
+
if (selection == ECORE_X_ATOM_SELECTION_PRIMARY)
in = 0;
else if (selection == ECORE_X_ATOM_SELECTION_SECONDARY)
* @return Returns 1 if the ownership of the selection was successfully
* claimed, or 0 if unsuccessful.
*/
-EAPI int
+EAPI int
ecore_x_selection_primary_set(Ecore_X_Window w, const void *data, int size)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
* or 0 if unsuccessful.
*
*/
-EAPI int
+EAPI int
ecore_x_selection_primary_clear(void)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
* @return Returns 1 if the ownership of the selection was successfully
* claimed, or 0 if unsuccessful.
*/
-EAPI int
+EAPI int
ecore_x_selection_secondary_set(Ecore_X_Window w, const void *data, int size)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
* or 0 if unsuccessful.
*
*/
-EAPI int
+EAPI int
ecore_x_selection_secondary_clear(void)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
* @return Returns 1 if the ownership of the selection was successfully
* claimed, or 0 if unsuccessful.
*/
-EAPI int
+EAPI int
ecore_x_selection_xdnd_set(Ecore_X_Window w, const void *data, int size)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
* or 0 if unsuccessful.
*
*/
-EAPI int
+EAPI int
ecore_x_selection_xdnd_clear(void)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
* Get the converted data from a previous CLIPBOARD selection
* request. The buffer must be freed when done with.
*/
-EAPI int
+EAPI int
ecore_x_selection_clipboard_set(Ecore_X_Window w, const void *data, int size)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
* or 0 if unsuccessful.
*
*/
-EAPI int
+EAPI int
ecore_x_selection_clipboard_clear(void)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
EAPI void
ecore_x_selection_converter_atom_add(Ecore_X_Atom target,
- int (*func)(char *target, void *data, int size, void **data_ret, int *size_ret))
+ int (*func)(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *tsize))
{
Ecore_X_Selection_Converter *cnv;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
cnv = converters;
- if (converters)
+ if (converters)
{
while (1)
{
}
EAPI void
-ecore_x_selection_converter_add(char *target,
- int (*func)(char *target, void *data, int size, void **data_ret, int *size_ret))
+ecore_x_selection_converter_add(char *target,
+ int (*func)(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *, int *))
{
Ecore_X_Atom x_target;
/* Locate and run conversion callback for specified selection target */
EAPI int
-ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target, void **data_ret)
+ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target,
+ void **data_ret, int *size, Ecore_X_Atom *targtype, int *typesize)
{
Ecore_X_Selection_Intern *sel;
Ecore_X_Selection_Converter *cnv;
void *data;
- int size;
char *tgt_str;
-
+
LOGFN(__FILE__, __LINE__, __FUNCTION__);
sel = _ecore_x_selection_get(selection);
tgt_str = _ecore_x_selection_target_get(target);
if (cnv->target == target)
{
int r;
- r = cnv->convert(tgt_str, sel->data, sel->length, &data, &size);
+ r = cnv->convert(tgt_str, sel->data, sel->length, &data, size,
+ targtype, typesize);
free(tgt_str);
if (r)
{
* locale using Ecore_Txt functions */
/* Converter for standard non-utf8 text targets */
static int
-_ecore_x_selection_converter_text(char *target, void *data, int size, void **data_ret, int *size_ret)
+_ecore_x_selection_converter_text(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *targprop, int *s)
{
XTextProperty text_prop;
char *mystr;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
prs = parsers;
- if (parsers)
+ if (parsers)
{
while (prs->next)
{
{
Ecore_X_Selection_Parser *prs;
Ecore_X_Selection_Data *sel;
-
+
for (prs = parsers; prs; prs = prs->next)
{
if (!strcmp(prs->target, target))
sel->targets = malloc((size - 2) * sizeof(char *));
for (i = 2; i < size; i++)
sel->targets[i - 2] = XGetAtomName(_ecore_x_disp, targets[i]);
+
free(data);
ECORE_X_SELECTION_DATA(sel)->free = _ecore_x_selection_data_targets_free;