diff --git a/src/lib/ecore_x/xcb/ecore_xcb_selection.c b/src/lib/ecore_x/xcb/ecore_xcb_selection.c index 85bcac7dee..a9a2615d81 100644 --- a/src/lib/ecore_x/xcb/ecore_xcb_selection.c +++ b/src/lib/ecore_x/xcb/ecore_xcb_selection.c @@ -624,6 +624,12 @@ _ecore_xcb_selection_set(Ecore_X_Window win, else return EINA_FALSE; + if (selections[in].data) + { + free(selections[in].data); + memset(&selections[in], 0, sizeof(Ecore_X_Selection_Intern)); + } + if (data) { unsigned char *buff = NULL; @@ -638,11 +644,6 @@ _ecore_xcb_selection_set(Ecore_X_Window win, memcpy(buff, data, size); _selections[in].data = buff; } - else if (_selections[in].data) - { - free(_selections[in].data); - memset(&_selections[in], 0, sizeof(Ecore_X_Selection_Data)); - } return EINA_TRUE; } diff --git a/src/lib/ecore_x/xlib/ecore_x_selection.c b/src/lib/ecore_x/xlib/ecore_x_selection.c index 6e38fcf521..d146fbdaf9 100644 --- a/src/lib/ecore_x/xlib/ecore_x_selection.c +++ b/src/lib/ecore_x/xlib/ecore_x_selection.c @@ -140,6 +140,12 @@ _ecore_x_selection_set(Window w, else return EINA_FALSE; + if (selections[in].data) + { + free(selections[in].data); + memset(&selections[in], 0, sizeof(Ecore_X_Selection_Intern)); + } + if (data) { selections[in].win = w; @@ -152,11 +158,6 @@ _ecore_x_selection_set(Window w, memcpy(buf, data, size); selections[in].data = buf; } - else if (selections[in].data) - { - free(selections[in].data); - memset(&selections[in], 0, sizeof(Ecore_X_Selection_Data)); - } return EINA_TRUE; }