aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c')
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c333
1 files changed, 167 insertions, 166 deletions
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c
index b1aa611..fa177c3 100644
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c
+++ b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c
@@ -15,29 +15,29 @@ static Ecore_X_Selection_Intern selections[4];
15static Ecore_X_Selection_Converter *converters = NULL; 15static Ecore_X_Selection_Converter *converters = NULL;
16static Ecore_X_Selection_Parser *parsers = NULL; 16static Ecore_X_Selection_Parser *parsers = NULL;
17 17
18static Eina_Bool _ecore_x_selection_converter_text(char *target, 18static Eina_Bool _ecore_x_selection_converter_text(char *target,
19 void *data, 19 void *data,
20 int size, 20 int size,
21 void **data_ret, 21 void **data_ret,
22 int *size_ret, 22 int *size_ret,
23 Ecore_X_Atom *tprop, 23 Ecore_X_Atom *tprop,
24 int *); 24 int *);
25static int _ecore_x_selection_data_default_free(void *data); 25static int _ecore_x_selection_data_default_free(void *data);
26static void *_ecore_x_selection_parser_files(const char *target, 26static void *_ecore_x_selection_parser_files(const char *target,
27 void *data, 27 void *data,
28 int size, 28 int size,
29 int format); 29 int format);
30static int _ecore_x_selection_data_files_free(void *data); 30static int _ecore_x_selection_data_files_free(void *data);
31static void *_ecore_x_selection_parser_text(const char *target, 31static void *_ecore_x_selection_parser_text(const char *target,
32 void *data, 32 void *data,
33 int size, 33 int size,
34 int format); 34 int format);
35static int _ecore_x_selection_data_text_free(void *data); 35static int _ecore_x_selection_data_text_free(void *data);
36static void *_ecore_x_selection_parser_targets(const char *target, 36static void *_ecore_x_selection_parser_targets(const char *target,
37 void *data, 37 void *data,
38 int size, 38 int size,
39 int format); 39 int format);
40static int _ecore_x_selection_data_targets_free(void *data); 40static int _ecore_x_selection_data_targets_free(void *data);
41 41
42#define ECORE_X_SELECTION_DATA(x) ((Ecore_X_Selection_Data *)(x)) 42#define ECORE_X_SELECTION_DATA(x) ((Ecore_X_Selection_Data *)(x))
43 43
@@ -45,32 +45,32 @@ void
45_ecore_x_selection_data_init(void) 45_ecore_x_selection_data_init(void)
46{ 46{
47 /* Initialize global data */ 47 /* Initialize global data */
48 memset(selections, 0, sizeof(selections)); 48 memset(selections, 0, sizeof(selections));
49 49
50 /* Initialize converters */ 50 /* Initialize converters */
51 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_TEXT, 51 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_TEXT,
52 _ecore_x_selection_converter_text); 52 _ecore_x_selection_converter_text);
53#ifdef X_HAVE_UTF8_STRING 53#ifdef X_HAVE_UTF8_STRING
54 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_UTF8_STRING, 54 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_UTF8_STRING,
55 _ecore_x_selection_converter_text); 55 _ecore_x_selection_converter_text);
56#endif /* ifdef X_HAVE_UTF8_STRING */ 56#endif /* ifdef X_HAVE_UTF8_STRING */
57 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_COMPOUND_TEXT, 57 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_COMPOUND_TEXT,
58 _ecore_x_selection_converter_text); 58 _ecore_x_selection_converter_text);
59 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_STRING, 59 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_STRING,
60 _ecore_x_selection_converter_text); 60 _ecore_x_selection_converter_text);
61 61
62 /* Initialize parsers */ 62 /* Initialize parsers */
63 ecore_x_selection_parser_add("text/plain", 63 ecore_x_selection_parser_add("text/plain",
64 _ecore_x_selection_parser_text); 64 _ecore_x_selection_parser_text);
65 ecore_x_selection_parser_add(ECORE_X_SELECTION_TARGET_UTF8_STRING, 65 ecore_x_selection_parser_add(ECORE_X_SELECTION_TARGET_UTF8_STRING,
66 _ecore_x_selection_parser_text); 66 _ecore_x_selection_parser_text);
67 ecore_x_selection_parser_add("text/uri-list", 67 ecore_x_selection_parser_add("text/uri-list",
68 _ecore_x_selection_parser_files); 68 _ecore_x_selection_parser_files);
69 ecore_x_selection_parser_add("_NETSCAPE_URL", 69 ecore_x_selection_parser_add("_NETSCAPE_URL",
70 _ecore_x_selection_parser_files); 70 _ecore_x_selection_parser_files);
71 ecore_x_selection_parser_add(ECORE_X_SELECTION_TARGET_TARGETS, 71 ecore_x_selection_parser_add(ECORE_X_SELECTION_TARGET_TARGETS,
72 _ecore_x_selection_parser_targets); 72 _ecore_x_selection_parser_targets);
73} /* _ecore_x_selection_data_init */ 73}
74 74
75void 75void
76_ecore_x_selection_shutdown(void) 76_ecore_x_selection_shutdown(void)
@@ -102,7 +102,7 @@ _ecore_x_selection_shutdown(void)
102 free(tmp); 102 free(tmp);
103 } 103 }
104 parsers = NULL; 104 parsers = NULL;
105} /* _ecore_x_selection_shutdown */ 105}
106 106
107Ecore_X_Selection_Intern * 107Ecore_X_Selection_Intern *
108_ecore_x_selection_get(Ecore_X_Atom selection) 108_ecore_x_selection_get(Ecore_X_Atom selection)
@@ -117,12 +117,12 @@ _ecore_x_selection_get(Ecore_X_Atom selection)
117 return &selections[3]; 117 return &selections[3];
118 else 118 else
119 return NULL; 119 return NULL;
120} /* _ecore_x_selection_get */ 120}
121 121
122Eina_Bool 122Eina_Bool
123_ecore_x_selection_set(Window w, 123_ecore_x_selection_set(Window w,
124 const void *data, 124 const void *data,
125 int size, 125 int size,
126 Ecore_X_Atom selection) 126 Ecore_X_Atom selection)
127{ 127{
128 int in; 128 int in;
@@ -162,7 +162,7 @@ _ecore_x_selection_set(Window w,
162 } 162 }
163 163
164 return EINA_TRUE; 164 return EINA_TRUE;
165} /* _ecore_x_selection_set */ 165}
166 166
167/** 167/**
168 * Claim ownership of the PRIMARY selection and set its data. 168 * Claim ownership of the PRIMARY selection and set its data.
@@ -174,12 +174,12 @@ _ecore_x_selection_set(Window w,
174 */ 174 */
175EAPI Eina_Bool 175EAPI Eina_Bool
176ecore_x_selection_primary_set(Ecore_X_Window w, 176ecore_x_selection_primary_set(Ecore_X_Window w,
177 const void *data, 177 const void *data,
178 int size) 178 int size)
179{ 179{
180 LOGFN(__FILE__, __LINE__, __FUNCTION__); 180 LOGFN(__FILE__, __LINE__, __FUNCTION__);
181 return _ecore_x_selection_set(w, data, size, ECORE_X_ATOM_SELECTION_PRIMARY); 181 return _ecore_x_selection_set(w, data, size, ECORE_X_ATOM_SELECTION_PRIMARY);
182} /* ecore_x_selection_primary_set */ 182}
183 183
184/** 184/**
185 * Release ownership of the primary selection 185 * Release ownership of the primary selection
@@ -192,7 +192,7 @@ ecore_x_selection_primary_clear(void)
192{ 192{
193 LOGFN(__FILE__, __LINE__, __FUNCTION__); 193 LOGFN(__FILE__, __LINE__, __FUNCTION__);
194 return _ecore_x_selection_set(None, NULL, 0, ECORE_X_ATOM_SELECTION_PRIMARY); 194 return _ecore_x_selection_set(None, NULL, 0, ECORE_X_ATOM_SELECTION_PRIMARY);
195} /* ecore_x_selection_primary_clear */ 195}
196 196
197/** 197/**
198 * Claim ownership of the SECONDARY selection and set its data. 198 * Claim ownership of the SECONDARY selection and set its data.
@@ -204,15 +204,15 @@ ecore_x_selection_primary_clear(void)
204 */ 204 */
205EAPI Eina_Bool 205EAPI Eina_Bool
206ecore_x_selection_secondary_set(Ecore_X_Window w, 206ecore_x_selection_secondary_set(Ecore_X_Window w,
207 const void *data, 207 const void *data,
208 int size) 208 int size)
209{ 209{
210 LOGFN(__FILE__, __LINE__, __FUNCTION__); 210 LOGFN(__FILE__, __LINE__, __FUNCTION__);
211 return _ecore_x_selection_set(w, 211 return _ecore_x_selection_set(w,
212 data, 212 data,
213 size, 213 size,
214 ECORE_X_ATOM_SELECTION_SECONDARY); 214 ECORE_X_ATOM_SELECTION_SECONDARY);
215} /* ecore_x_selection_secondary_set */ 215}
216 216
217/** 217/**
218 * Release ownership of the secondary selection 218 * Release ownership of the secondary selection
@@ -228,7 +228,7 @@ ecore_x_selection_secondary_clear(void)
228 NULL, 228 NULL,
229 0, 229 0,
230 ECORE_X_ATOM_SELECTION_SECONDARY); 230 ECORE_X_ATOM_SELECTION_SECONDARY);
231} /* ecore_x_selection_secondary_clear */ 231}
232 232
233/** 233/**
234 * Claim ownership of the XDND selection and set its data. 234 * Claim ownership of the XDND selection and set its data.
@@ -240,12 +240,12 @@ ecore_x_selection_secondary_clear(void)
240 */ 240 */
241EAPI Eina_Bool 241EAPI Eina_Bool
242ecore_x_selection_xdnd_set(Ecore_X_Window w, 242ecore_x_selection_xdnd_set(Ecore_X_Window w,
243 const void *data, 243 const void *data,
244 int size) 244 int size)
245{ 245{
246 LOGFN(__FILE__, __LINE__, __FUNCTION__); 246 LOGFN(__FILE__, __LINE__, __FUNCTION__);
247 return _ecore_x_selection_set(w, data, size, ECORE_X_ATOM_SELECTION_XDND); 247 return _ecore_x_selection_set(w, data, size, ECORE_X_ATOM_SELECTION_XDND);
248} /* ecore_x_selection_xdnd_set */ 248}
249 249
250/** 250/**
251 * Release ownership of the XDND selection 251 * Release ownership of the XDND selection
@@ -258,7 +258,7 @@ ecore_x_selection_xdnd_clear(void)
258{ 258{
259 LOGFN(__FILE__, __LINE__, __FUNCTION__); 259 LOGFN(__FILE__, __LINE__, __FUNCTION__);
260 return _ecore_x_selection_set(None, NULL, 0, ECORE_X_ATOM_SELECTION_XDND); 260 return _ecore_x_selection_set(None, NULL, 0, ECORE_X_ATOM_SELECTION_XDND);
261} /* ecore_x_selection_xdnd_clear */ 261}
262 262
263/** 263/**
264 * Claim ownership of the CLIPBOARD selection and set its data. 264 * Claim ownership of the CLIPBOARD selection and set its data.
@@ -273,15 +273,15 @@ ecore_x_selection_xdnd_clear(void)
273 */ 273 */
274EAPI Eina_Bool 274EAPI Eina_Bool
275ecore_x_selection_clipboard_set(Ecore_X_Window w, 275ecore_x_selection_clipboard_set(Ecore_X_Window w,
276 const void *data, 276 const void *data,
277 int size) 277 int size)
278{ 278{
279 LOGFN(__FILE__, __LINE__, __FUNCTION__); 279 LOGFN(__FILE__, __LINE__, __FUNCTION__);
280 return _ecore_x_selection_set(w, 280 return _ecore_x_selection_set(w,
281 data, 281 data,
282 size, 282 size,
283 ECORE_X_ATOM_SELECTION_CLIPBOARD); 283 ECORE_X_ATOM_SELECTION_CLIPBOARD);
284} /* ecore_x_selection_clipboard_set */ 284}
285 285
286/** 286/**
287 * Release ownership of the clipboard selection 287 * Release ownership of the clipboard selection
@@ -297,7 +297,7 @@ ecore_x_selection_clipboard_clear(void)
297 NULL, 297 NULL,
298 0, 298 0,
299 ECORE_X_ATOM_SELECTION_CLIPBOARD); 299 ECORE_X_ATOM_SELECTION_CLIPBOARD);
300} /* ecore_x_selection_clipboard_clear */ 300}
301 301
302Ecore_X_Atom 302Ecore_X_Atom
303_ecore_x_selection_target_atom_get(const char *target) 303_ecore_x_selection_target_atom_get(const char *target)
@@ -318,29 +318,29 @@ _ecore_x_selection_target_atom_get(const char *target)
318 x_target = ecore_x_atom_get(target); 318 x_target = ecore_x_atom_get(target);
319 319
320 return x_target; 320 return x_target;
321} /* _ecore_x_selection_target_atom_get */ 321}
322 322
323char * 323char *
324_ecore_x_selection_target_get(Ecore_X_Atom target) 324_ecore_x_selection_target_get(Ecore_X_Atom target)
325{ 325{
326 /* FIXME: Should not return mem allocated with strdup or X mixed, 326 /* FIXME: Should not return mem allocated with strdup or X mixed,
327 * one should use free to free, the other XFree */ 327 * one should use free to free, the other XFree */
328 if (target == ECORE_X_ATOM_FILE_NAME) 328 if (target == ECORE_X_ATOM_FILE_NAME)
329 return strdup(ECORE_X_SELECTION_TARGET_FILENAME); 329 return strdup(ECORE_X_SELECTION_TARGET_FILENAME);
330 else if (target == ECORE_X_ATOM_STRING) 330 else if (target == ECORE_X_ATOM_STRING)
331 return strdup(ECORE_X_SELECTION_TARGET_STRING); 331 return strdup(ECORE_X_SELECTION_TARGET_STRING);
332 else if (target == ECORE_X_ATOM_UTF8_STRING) 332 else if (target == ECORE_X_ATOM_UTF8_STRING)
333 return strdup(ECORE_X_SELECTION_TARGET_UTF8_STRING); 333 return strdup(ECORE_X_SELECTION_TARGET_UTF8_STRING);
334 else if (target == ECORE_X_ATOM_TEXT) 334 else if (target == ECORE_X_ATOM_TEXT)
335 return strdup(ECORE_X_SELECTION_TARGET_TEXT); 335 return strdup(ECORE_X_SELECTION_TARGET_TEXT);
336 else 336 else
337 return XGetAtomName(_ecore_x_disp, target); 337 return XGetAtomName(_ecore_x_disp, target);
338} /* _ecore_x_selection_target_get */ 338}
339 339
340static void 340static void
341_ecore_x_selection_request(Ecore_X_Window w, 341_ecore_x_selection_request(Ecore_X_Window w,
342 Ecore_X_Atom selection, 342 Ecore_X_Atom selection,
343 const char *target_str) 343 const char *target_str)
344{ 344{
345 Ecore_X_Atom target, prop; 345 Ecore_X_Atom target, prop;
346 346
@@ -357,27 +357,27 @@ _ecore_x_selection_request(Ecore_X_Window w,
357 357
358 XConvertSelection(_ecore_x_disp, selection, target, prop, 358 XConvertSelection(_ecore_x_disp, selection, target, prop,
359 w, CurrentTime); 359 w, CurrentTime);
360} /* _ecore_x_selection_request */ 360}
361 361
362EAPI void 362EAPI void
363ecore_x_selection_primary_request(Ecore_X_Window w, 363ecore_x_selection_primary_request(Ecore_X_Window w,
364 const char *target) 364 const char *target)
365{ 365{
366 LOGFN(__FILE__, __LINE__, __FUNCTION__); 366 LOGFN(__FILE__, __LINE__, __FUNCTION__);
367 _ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_PRIMARY, target); 367 _ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_PRIMARY, target);
368} /* ecore_x_selection_primary_request */ 368}
369 369
370EAPI void 370EAPI void
371ecore_x_selection_secondary_request(Ecore_X_Window w, 371ecore_x_selection_secondary_request(Ecore_X_Window w,
372 const char *target) 372 const char *target)
373{ 373{
374 LOGFN(__FILE__, __LINE__, __FUNCTION__); 374 LOGFN(__FILE__, __LINE__, __FUNCTION__);
375 _ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_SECONDARY, target); 375 _ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_SECONDARY, target);
376} /* ecore_x_selection_secondary_request */ 376}
377 377
378EAPI void 378EAPI void
379ecore_x_selection_xdnd_request(Ecore_X_Window w, 379ecore_x_selection_xdnd_request(Ecore_X_Window w,
380 const char *target) 380 const char *target)
381{ 381{
382 Ecore_X_Atom atom; 382 Ecore_X_Atom atom;
383 Ecore_X_DND_Target *_target; 383 Ecore_X_DND_Target *_target;
@@ -388,25 +388,25 @@ ecore_x_selection_xdnd_request(Ecore_X_Window w,
388 XConvertSelection(_ecore_x_disp, ECORE_X_ATOM_SELECTION_XDND, atom, 388 XConvertSelection(_ecore_x_disp, ECORE_X_ATOM_SELECTION_XDND, atom,
389 ECORE_X_ATOM_SELECTION_PROP_XDND, w, 389 ECORE_X_ATOM_SELECTION_PROP_XDND, w,
390 _target->time); 390 _target->time);
391} /* ecore_x_selection_xdnd_request */ 391}
392 392
393EAPI void 393EAPI void
394ecore_x_selection_clipboard_request(Ecore_X_Window w, 394ecore_x_selection_clipboard_request(Ecore_X_Window w,
395 const char *target) 395 const char *target)
396{ 396{
397 LOGFN(__FILE__, __LINE__, __FUNCTION__); 397 LOGFN(__FILE__, __LINE__, __FUNCTION__);
398 _ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_CLIPBOARD, target); 398 _ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_CLIPBOARD, target);
399} /* ecore_x_selection_clipboard_request */ 399}
400 400
401EAPI void 401EAPI void
402ecore_x_selection_converter_atom_add(Ecore_X_Atom target, 402ecore_x_selection_converter_atom_add(Ecore_X_Atom target,
403 Eina_Bool (*func)(char *target, 403 Eina_Bool (*func)(char *target,
404 void *data, 404 void *data,
405 int size, 405 int size,
406 void **data_ret, 406 void **data_ret,
407 int *size_ret, 407 int *size_ret,
408 Ecore_X_Atom *ttype, 408 Ecore_X_Atom *ttype,
409 int *tsize)) 409 int *tsize))
410{ 410{
411 Ecore_X_Selection_Converter *cnv; 411 Ecore_X_Selection_Converter *cnv;
412 412
@@ -441,17 +441,17 @@ ecore_x_selection_converter_atom_add(Ecore_X_Atom
441 441
442 cnv->target = target; 442 cnv->target = target;
443 cnv->convert = func; 443 cnv->convert = func;
444} /* ecore_x_selection_converter_atom_add */ 444}
445 445
446EAPI void 446EAPI void
447ecore_x_selection_converter_add(char *target, 447ecore_x_selection_converter_add(char *target,
448 Eina_Bool (*func)(char *target, 448 Eina_Bool (*func)(char *target,
449 void *data, 449 void *data,
450 int size, 450 int size,
451 void **data_ret, 451 void **data_ret,
452 int *size_ret, 452 int *size_ret,
453 Ecore_X_Atom *, 453 Ecore_X_Atom *,
454 int *)) 454 int *))
455{ 455{
456 Ecore_X_Atom x_target; 456 Ecore_X_Atom x_target;
457 457
@@ -462,7 +462,7 @@ ecore_x_selection_converter_add(char *target,
462 x_target = _ecore_x_selection_target_atom_get(target); 462 x_target = _ecore_x_selection_target_atom_get(target);
463 463
464 ecore_x_selection_converter_atom_add(x_target, func); 464 ecore_x_selection_converter_atom_add(x_target, func);
465} /* ecore_x_selection_converter_add */ 465}
466 466
467EAPI void 467EAPI void
468ecore_x_selection_converter_atom_del(Ecore_X_Atom target) 468ecore_x_selection_converter_atom_del(Ecore_X_Atom target)
@@ -492,7 +492,7 @@ ecore_x_selection_converter_atom_del(Ecore_X_Atom target)
492 prev_cnv = cnv; 492 prev_cnv = cnv;
493 cnv = cnv->next; 493 cnv = cnv->next;
494 } 494 }
495} /* ecore_x_selection_converter_atom_del */ 495}
496 496
497EAPI void 497EAPI void
498ecore_x_selection_converter_del(char *target) 498ecore_x_selection_converter_del(char *target)
@@ -505,14 +505,14 @@ ecore_x_selection_converter_del(char *target)
505 LOGFN(__FILE__, __LINE__, __FUNCTION__); 505 LOGFN(__FILE__, __LINE__, __FUNCTION__);
506 x_target = _ecore_x_selection_target_atom_get(target); 506 x_target = _ecore_x_selection_target_atom_get(target);
507 ecore_x_selection_converter_atom_del(x_target); 507 ecore_x_selection_converter_atom_del(x_target);
508} /* ecore_x_selection_converter_del */ 508}
509 509
510EAPI Eina_Bool 510EAPI Eina_Bool
511ecore_x_selection_notify_send(Ecore_X_Window requestor, 511ecore_x_selection_notify_send(Ecore_X_Window requestor,
512 Ecore_X_Atom selection, 512 Ecore_X_Atom selection,
513 Ecore_X_Atom target, 513 Ecore_X_Atom target,
514 Ecore_X_Atom property, 514 Ecore_X_Atom property,
515 Ecore_X_Time tim) 515 Ecore_X_Time tim)
516{ 516{
517 XEvent xev; 517 XEvent xev;
518 XSelectionEvent xnotify; 518 XSelectionEvent xnotify;
@@ -530,16 +530,16 @@ ecore_x_selection_notify_send(Ecore_X_Window requestor,
530 530
531 xev.xselection = xnotify; 531 xev.xselection = xnotify;
532 return (XSendEvent(_ecore_x_disp, requestor, False, 0, &xev) > 0) ? EINA_TRUE : EINA_FALSE; 532 return (XSendEvent(_ecore_x_disp, requestor, False, 0, &xev) > 0) ? EINA_TRUE : EINA_FALSE;
533} /* ecore_x_selection_notify_send */ 533}
534 534
535/* Locate and run conversion callback for specified selection target */ 535/* Locate and run conversion callback for specified selection target */
536EAPI Eina_Bool 536EAPI Eina_Bool
537ecore_x_selection_convert(Ecore_X_Atom selection, 537ecore_x_selection_convert(Ecore_X_Atom selection,
538 Ecore_X_Atom target, 538 Ecore_X_Atom target,
539 void **data_ret, 539 void **data_ret,
540 int *size, 540 int *size,
541 Ecore_X_Atom *targtype, 541 Ecore_X_Atom *targtype,
542 int *typesize) 542 int *typesize)
543{ 543{
544 Ecore_X_Selection_Intern *sel; 544 Ecore_X_Selection_Intern *sel;
545 Ecore_X_Selection_Converter *cnv; 545 Ecore_X_Selection_Converter *cnv;
@@ -572,24 +572,24 @@ ecore_x_selection_convert(Ecore_X_Atom selection,
572 return EINA_FALSE; 572 return EINA_FALSE;
573 573
574 /* Default, just return the data 574 /* Default, just return the data
575 *data_ret = malloc(sel->length); 575 * data_ret = malloc(sel->length);
576 memcpy(*data_ret, sel->data, sel->length); 576 memcpy(*data_ret, sel->data, sel->length);
577 free(tgt_str); 577 free(tgt_str);
578 return 1; 578 return 1;
579 */ 579 */
580} /* ecore_x_selection_convert */ 580}
581 581
582/* TODO: We need to work out a mechanism for automatic conversion to any requested 582/* TODO: We need to work out a mechanism for automatic conversion to any requested
583 * locale using Ecore_Txt functions */ 583 * locale using Ecore_Txt functions */
584/* Converter for standard non-utf8 text targets */ 584/* Converter for standard non-utf8 text targets */
585static Eina_Bool 585static Eina_Bool
586_ecore_x_selection_converter_text(char *target, 586_ecore_x_selection_converter_text(char *target,
587 void *data, 587 void *data,
588 int size, 588 int size,
589 void **data_ret, 589 void **data_ret,
590 int *size_ret, 590 int *size_ret,
591 Ecore_X_Atom *targprop __UNUSED__, 591 Ecore_X_Atom *targprop __UNUSED__,
592 int *s __UNUSED__) 592 int *s __UNUSED__)
593{ 593{
594 XTextProperty text_prop; 594 XTextProperty text_prop;
595 char *mystr; 595 char *mystr;
@@ -651,7 +651,7 @@ _ecore_x_selection_converter_text(char *target,
651 { 651 {
652 return EINA_TRUE; 652 return EINA_TRUE;
653 } 653 }
654} /* _ecore_x_selection_converter_text */ 654}
655 655
656EAPI void 656EAPI void
657ecore_x_selection_parser_add(const char *target, 657ecore_x_selection_parser_add(const char *target,
@@ -692,7 +692,7 @@ ecore_x_selection_parser_add(const char *target,
692 692
693 prs->target = strdup(target); 693 prs->target = strdup(target);
694 prs->parse = func; 694 prs->parse = func;
695} /* ecore_x_selection_parser_add */ 695}
696 696
697EAPI void 697EAPI void
698ecore_x_selection_parser_del(const char *target) 698ecore_x_selection_parser_del(const char *target)
@@ -726,19 +726,19 @@ ecore_x_selection_parser_del(const char *target)
726 prev_prs = prs; 726 prev_prs = prs;
727 prs = prs->next; 727 prs = prs->next;
728 } 728 }
729} /* ecore_x_selection_parser_del */ 729}
730 730
731/** 731/**
732 * Change the owner and last-change time for the specified selection. 732 * Change the owner and last-change time for the specified selection.
733 * @param win The owner of the specified atom. 733 * @param win The owner of the specified atom.
734 * @param atom The selection atom 734 * @param atom The selection atom
735 * @param time Specifies the time 735 * @param tim Specifies the time
736 * @since 1.1.0 736 * @since 1.1.0
737 */ 737 */
738EAPI void 738EAPI void
739ecore_x_selection_owner_set(Ecore_X_Window win, 739ecore_x_selection_owner_set(Ecore_X_Window win,
740 Ecore_X_Atom atom, 740 Ecore_X_Atom atom,
741 Ecore_X_Time tim) 741 Ecore_X_Time tim)
742{ 742{
743 XSetSelectionOwner(_ecore_x_disp, atom, win, tim); 743 XSetSelectionOwner(_ecore_x_disp, atom, win, tim);
744} 744}
@@ -760,9 +760,9 @@ ecore_x_selection_owner_get(Ecore_X_Atom atom)
760/* Locate and run conversion callback for specified selection target */ 760/* Locate and run conversion callback for specified selection target */
761void * 761void *
762_ecore_x_selection_parse(const char *target, 762_ecore_x_selection_parse(const char *target,
763 void *data, 763 void *data,
764 int size, 764 int size,
765 int format) 765 int format)
766{ 766{
767 Ecore_X_Selection_Parser *prs; 767 Ecore_X_Selection_Parser *prs;
768 Ecore_X_Selection_Data *sel; 768 Ecore_X_Selection_Data *sel;
@@ -784,7 +784,7 @@ _ecore_x_selection_parse(const char *target,
784 sel->format = format; 784 sel->format = format;
785 sel->data = data; 785 sel->data = data;
786 return sel; 786 return sel;
787} /* _ecore_x_selection_parse */ 787}
788 788
789static int 789static int
790_ecore_x_selection_data_default_free(void *data) 790_ecore_x_selection_data_default_free(void *data)
@@ -795,13 +795,13 @@ _ecore_x_selection_data_default_free(void *data)
795 free(sel->data); 795 free(sel->data);
796 free(sel); 796 free(sel);
797 return 1; 797 return 1;
798} /* _ecore_x_selection_data_default_free */ 798}
799 799
800static void * 800static void *
801_ecore_x_selection_parser_files(const char *target, 801_ecore_x_selection_parser_files(const char *target,
802 void *_data, 802 void *_data,
803 int size, 803 int size,
804 int format __UNUSED__) 804 int format __UNUSED__)
805{ 805{
806 Ecore_X_Selection_Data_Files *sel; 806 Ecore_X_Selection_Data_Files *sel;
807 char *t, *data = _data; 807 char *t, *data = _data;
@@ -820,15 +820,15 @@ _ecore_x_selection_parser_files(const char *target,
820 if (data[size - 1]) 820 if (data[size - 1])
821 { 821 {
822 /* Isn't nul terminated */ 822 /* Isn't nul terminated */
823 size++; 823 size++;
824 t = realloc(data, size); 824 t = realloc(data, size);
825 if (!t) 825 if (!t)
826 { 826 {
827 free(sel); 827 free(sel);
828 return NULL; 828 return NULL;
829 } 829 }
830 data = t; 830 data = t;
831 data[size - 1] = 0; 831 data[size - 1] = 0;
832 } 832 }
833 833
834 tmp = malloc(size); 834 tmp = malloc(size);
@@ -850,7 +850,8 @@ _ecore_x_selection_parser_files(const char *target,
850 tmp[i++] = data[is++]; 850 tmp[i++] = data[is++];
851 else 851 else
852 { 852 {
853 while ((data[is] == '\r') || (data[is] == '\n')) is++; 853 while ((data[is] == '\r') || (data[is] == '\n'))
854 is++;
854 tmp[i] = 0; 855 tmp[i] = 0;
855 sel->num_files++; 856 sel->num_files++;
856 t2 = realloc(sel->files, sel->num_files * sizeof(char *)); 857 t2 = realloc(sel->files, sel->num_files * sizeof(char *));
@@ -883,7 +884,7 @@ _ecore_x_selection_parser_files(const char *target,
883 ECORE_X_SELECTION_DATA(sel)->length = sel->num_files; 884 ECORE_X_SELECTION_DATA(sel)->length = sel->num_files;
884 885
885 return ECORE_X_SELECTION_DATA(sel); 886 return ECORE_X_SELECTION_DATA(sel);
886} /* _ecore_x_selection_parser_files */ 887}
887 888
888static int 889static int
889_ecore_x_selection_data_files_free(void *data) 890_ecore_x_selection_data_files_free(void *data)
@@ -901,13 +902,13 @@ _ecore_x_selection_data_files_free(void *data)
901 902
902 free(sel); 903 free(sel);
903 return 0; 904 return 0;
904} /* _ecore_x_selection_data_files_free */ 905}
905 906
906static void * 907static void *
907_ecore_x_selection_parser_text(const char *target __UNUSED__, 908_ecore_x_selection_parser_text(const char *target __UNUSED__,
908 void *_data, 909 void *_data,
909 int size, 910 int size,
910 int format __UNUSED__) 911 int format __UNUSED__)
911{ 912{
912 Ecore_X_Selection_Data_Text *sel; 913 Ecore_X_Selection_Data_Text *sel;
913 unsigned char *data = _data; 914 unsigned char *data = _data;
@@ -918,15 +919,15 @@ _ecore_x_selection_parser_text(const char *target __UNUSED__,
918 if (data[size - 1]) 919 if (data[size - 1])
919 { 920 {
920 /* Isn't nul terminated */ 921 /* Isn't nul terminated */
921 size++; 922 size++;
922 t = realloc(data, size); 923 t = realloc(data, size);
923 if (!t) 924 if (!t)
924 { 925 {
925 free(sel); 926 free(sel);
926 return NULL; 927 return NULL;
927 } 928 }
928 data = t; 929 data = t;
929 data[size - 1] = 0; 930 data[size - 1] = 0;
930 } 931 }
931 932
932 sel->text = (char *)data; 933 sel->text = (char *)data;
@@ -935,7 +936,7 @@ _ecore_x_selection_parser_text(const char *target __UNUSED__,
935 ECORE_X_SELECTION_DATA(sel)->data = data; 936 ECORE_X_SELECTION_DATA(sel)->data = data;
936 ECORE_X_SELECTION_DATA(sel)->free = _ecore_x_selection_data_text_free; 937 ECORE_X_SELECTION_DATA(sel)->free = _ecore_x_selection_data_text_free;
937 return sel; 938 return sel;
938} /* _ecore_x_selection_parser_text */ 939}
939 940
940static int 941static int
941_ecore_x_selection_data_text_free(void *data) 942_ecore_x_selection_data_text_free(void *data)
@@ -946,13 +947,13 @@ _ecore_x_selection_data_text_free(void *data)
946 free(sel->text); 947 free(sel->text);
947 free(sel); 948 free(sel);
948 return 1; 949 return 1;
949} /* _ecore_x_selection_data_text_free */ 950}
950 951
951static void * 952static void *
952_ecore_x_selection_parser_targets(const char *target __UNUSED__, 953_ecore_x_selection_parser_targets(const char *target __UNUSED__,
953 void *data, 954 void *data,
954 int size, 955 int size,
955 int format __UNUSED__) 956 int format __UNUSED__)
956{ 957{
957 Ecore_X_Selection_Data_Targets *sel; 958 Ecore_X_Selection_Data_Targets *sel;
958 unsigned long *targets; 959 unsigned long *targets;
@@ -977,7 +978,7 @@ _ecore_x_selection_parser_targets(const char *target __UNUSED__,
977 ECORE_X_SELECTION_DATA(sel)->length = size; 978 ECORE_X_SELECTION_DATA(sel)->length = size;
978 ECORE_X_SELECTION_DATA(sel)->data = data; 979 ECORE_X_SELECTION_DATA(sel)->data = data;
979 return sel; 980 return sel;
980} /* _ecore_x_selection_parser_targets */ 981}
981 982
982static int 983static int
983_ecore_x_selection_data_targets_free(void *data) 984_ecore_x_selection_data_targets_free(void *data)
@@ -997,5 +998,5 @@ _ecore_x_selection_data_targets_free(void *data)
997 free(ECORE_X_SELECTION_DATA(sel)->data); 998 free(ECORE_X_SELECTION_DATA(sel)->data);
998 free(sel); 999 free(sel);
999 return 1; 1000 return 1;
1000} /* _ecore_x_selection_data_targets_free */ 1001}
1001 1002