Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_x Modified Files: Ecore_X.h ecore_x_events.c ecore_x_private.h ecore_x_selection.c ecore_x_window_prop.c Log Message: Allow data formats other than the specified format when fetching properties. Pass the actual data format along with property data. =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v retrieving revision 1.173 retrieving revision 1.174 diff -u -3 -r1.173 -r1.174 --- Ecore_X.h 13 Sep 2006 17:45:12 -0000 1.173 +++ Ecore_X.h 29 Sep 2006 05:49:13 -0000 1.174 @@ -563,6 +563,7 @@ } content; unsigned char *data; int length; + int format; int (*free)(void *data); }; @@ -1001,7 +1002,7 @@ 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 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, unsigned char *data, int size)); +EAPI void ecore_x_selection_parser_add(const char *target, void *(*func)(const char *target, unsigned char *data, int size, int format)); EAPI void ecore_x_selection_parser_del(const char *target); EAPI void ecore_x_dnd_aware_set(Ecore_X_Window win, int on); =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v retrieving revision 1.85 retrieving revision 1.86 diff -u -3 -r1.85 -r1.86 --- ecore_x_events.c 28 Sep 2006 18:56:03 -0000 1.85 +++ ecore_x_events.c 29 Sep 2006 05:49:13 -0000 1.86 @@ -1160,27 +1160,26 @@ unsigned char *data = NULL; Ecore_X_Atom selection; int num_ret; + int format; selection = xevent->xselection.selection; if (xevent->xselection.target == ECORE_X_ATOM_SELECTION_TARGETS) { - if (!ecore_x_window_prop_property_get(xevent->xselection.requestor, - xevent->xselection.property, - XA_ATOM, 32, &data, &num_ret)) + format = ecore_x_window_prop_property_get(xevent->xselection.requestor, + xevent->xselection.property, + XA_ATOM, 32, &data, &num_ret); + if (!format) return; } else { - if (!ecore_x_window_prop_property_get(xevent->xselection.requestor, - xevent->xselection.property, - AnyPropertyType, 8, &data, &num_ret)) - { - if (!ecore_x_window_prop_property_get(xevent->xselection.requestor, - xevent->xselection.property, - AnyPropertyType, 16, &data, &num_ret)) - return; - } + format = ecore_x_window_prop_property_get(xevent->xselection.requestor, + xevent->xselection.property, + AnyPropertyType, 8, &data, + &num_ret); + if (!format) + return; } e = calloc(1, sizeof(Ecore_X_Event_Selection_Notify)); @@ -1202,7 +1201,7 @@ free(e); return; } - e->data = _ecore_x_selection_parse(e->target, data, num_ret); + e->data = _ecore_x_selection_parse(e->target, data, num_ret, format); ecore_event_add(ECORE_X_EVENT_SELECTION_NOTIFY, e, _ecore_x_event_free_selection_notify, NULL); } =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h,v retrieving revision 1.54 retrieving revision 1.55 diff -u -3 -r1.54 -r1.55 --- ecore_x_private.h 19 May 2006 06:05:35 -0000 1.54 +++ ecore_x_private.h 29 Sep 2006 05:49:13 -0000 1.55 @@ -90,7 +90,7 @@ struct _Ecore_X_Selection_Parser { char *target; - void *(*parse)(const char *target, unsigned char *data, int size); + void *(*parse)(const char *target, unsigned char *data, int size, int format); Ecore_X_Selection_Parser *next; }; @@ -215,7 +215,7 @@ _ecore_x_selection_get(Ecore_X_Atom selection); int _ecore_x_selection_set(Window w, unsigned char *data, int len, Ecore_X_Atom selection); int _ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target, void **data_ret); -void *_ecore_x_selection_parse(const char *target, unsigned char *data, int size); +void *_ecore_x_selection_parse(const char *target, unsigned char *data, int size, int format); void _ecore_x_sync_magic_send(int val, Ecore_X_Window swin); void _ecore_x_window_grab_remove(Ecore_X_Window win); =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x_selection.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -3 -r1.29 -r1.30 --- ecore_x_selection.c 14 Jul 2006 09:37:11 -0000 1.29 +++ ecore_x_selection.c 29 Sep 2006 05:49:14 -0000 1.30 @@ -13,11 +13,11 @@ static int _ecore_x_selection_converter_text(char *target, void *data, int size, void **data_ret, int *size_ret); static int _ecore_x_selection_data_default_free(void *data); -static void *_ecore_x_selection_parser_files(const char *target, unsigned char *data, int size); +static void *_ecore_x_selection_parser_files(const char *target, unsigned char *data, int size, int format); static int _ecore_x_selection_data_files_free(void *data); -static void *_ecore_x_selection_parser_text(const char *target, unsigned char *data, int size); +static void *_ecore_x_selection_parser_text(const char *target, unsigned char *data, int size, int format); static int _ecore_x_selection_data_text_free(void *data); -static void *_ecore_x_selection_parser_targets(const char *target, unsigned char *data, int size); +static void *_ecore_x_selection_parser_targets(const char *target, unsigned char *data, int size, int format); static int _ecore_x_selection_data_targets_free(void *data); #define ECORE_X_SELECTION_DATA(x) ((Ecore_X_Selection_Data *)(x)) @@ -523,7 +523,7 @@ EAPI void ecore_x_selection_parser_add(const char *target, - void *(*func)(const char *target, unsigned char *data, int size)) + void *(*func)(const char *target, unsigned char *data, int size, int format)) { Ecore_X_Selection_Parser *prs; @@ -586,7 +586,7 @@ /* Locate and run conversion callback for specified selection target */ void * -_ecore_x_selection_parse(const char *target, unsigned char *data, int size) +_ecore_x_selection_parse(const char *target, unsigned char *data, int size, int format) { Ecore_X_Selection_Parser *prs; Ecore_X_Selection_Data *sel; @@ -595,7 +595,7 @@ { if (!strcmp(prs->target, target)) { - sel = prs->parse(target, data, size); + sel = prs->parse(target, data, size, format); return sel; } } @@ -604,6 +604,7 @@ sel = calloc(1, sizeof(Ecore_X_Selection_Data)); sel->free = _ecore_x_selection_data_default_free; sel->length = size; + sel->format = format; sel->data = data; return sel; } @@ -620,7 +621,7 @@ } static void * -_ecore_x_selection_parser_files(const char *target, unsigned char *data, int size) +_ecore_x_selection_parser_files(const char *target, unsigned char *data, int size, int format) { Ecore_X_Selection_Data_Files *sel; int i, is; @@ -703,7 +704,7 @@ } static void * -_ecore_x_selection_parser_text(const char *target __UNUSED__, unsigned char *data, int size) +_ecore_x_selection_parser_text(const char *target __UNUSED__, unsigned char *data, int size, int format) { Ecore_X_Selection_Data_Text *sel; @@ -736,7 +737,7 @@ } static void * -_ecore_x_selection_parser_targets(const char *target __UNUSED__, unsigned char *data, int size) +_ecore_x_selection_parser_targets(const char *target __UNUSED__, unsigned char *data, int size, int format) { Ecore_X_Selection_Data_Targets *sel; unsigned long *targets; =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x_window_prop.c,v retrieving revision 1.80 retrieving revision 1.81 diff -u -3 -r1.80 -r1.81 --- ecore_x_window_prop.c 6 Jan 2006 20:22:09 -0000 1.80 +++ ecore_x_window_prop.c 29 Sep 2006 05:49:14 -0000 1.81 @@ -457,17 +457,17 @@ if (ret != Success) return 0; - if (size != size_ret || !num_ret) { + if (!num_ret) { XFree(prop_ret); return 0; } - if (!(*data = malloc(num_ret * size / 8))) { + if (!(*data = malloc(num_ret * size_ret / 8))) { XFree(prop_ret); return 0; } - switch (size) { + switch (size_ret) { case 8: for (i = 0; i < num_ret; i++) (*data)[i] = prop_ret[i]; @@ -485,7 +485,7 @@ XFree(prop_ret); if (num) *num = num_ret; - return 1; + return size_ret; } EAPI void ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs