From: Enlightenment S. <no-...@en...> - 2011-07-24 22:19:08
|
Log: Ecore_X: Fix CnP when using xcb backend. Author: devilhorns Date: 2011-07-24 15:19:00 -0700 (Sun, 24 Jul 2011) New Revision: 61662 Trac: http://trac.enlightenment.org/e/changeset/61662 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c 2011-07-24 22:05:02 UTC (rev 61661) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c 2011-07-24 22:19:00 UTC (rev 61662) @@ -532,11 +532,12 @@ LOGFN(__FILE__, __LINE__, __FUNCTION__); xcb_set_selection_owner(_ecore_xcb_conn, win, - selection, ecore_x_current_time_get()); + selection, _ecore_xcb_events_last_time_get()); cookie = xcb_get_selection_owner(_ecore_xcb_conn, selection); reply = xcb_get_selection_owner_reply(_ecore_xcb_conn, cookie, NULL); if (!reply) return EINA_FALSE; + if (reply->owner != win) { free(reply); @@ -552,7 +553,7 @@ in = 2; else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD) in = 3; - else + else return EINA_FALSE; if (data) @@ -562,7 +563,7 @@ _selections[in].win = win; _selections[in].selection = selection; _selections[in].length = size; - _selections[in].time = ecore_x_current_time_get(); + _selections[in].time = _ecore_xcb_events_last_time_get(); buff = malloc(size); if (!buff) return EINA_FALSE; @@ -597,7 +598,7 @@ atarget = _ecore_xcb_selection_target_atom_get(target); xcb_convert_selection(_ecore_xcb_conn, win, selection, atarget, prop, - ecore_x_current_time_get()); + XCB_CURRENT_TIME); } static Eina_Bool @@ -622,7 +623,9 @@ else return EINA_FALSE; - if (!(str = strdup(data))) return EINA_FALSE; + str = alloca(size + 1); + memcpy(str, data, size); + str[size] = '\0'; #ifdef HAVE_ICONV if (_ecore_xcb_utf8_textlist_to_textproperty(&str, 1, style, &ret)) @@ -631,15 +634,10 @@ size = (strlen((char *)ret.value) + 1); *data_ret = malloc(size); - if (!*data_ret) - { - free(str); - return EINA_FALSE; - } + if (!*data_ret) return EINA_FALSE; memcpy(*data_ret, ret.value, size); *size_ret = size; if (ret.value) free(ret.value); - if (str) free(str); return EINA_TRUE; } #else @@ -649,23 +647,16 @@ size = (strlen((char *)ret.value) + 1); *data_ret = malloc(size); - if (!*data_ret) - { - free(str); - return EINA_FALSE; - } + if (!*data_ret) return EINA_FALSE; memcpy(*data_ret, ret.value, size); *size_ret = size; if (ret.value) free(ret.value); - if (str) free(str); return EINA_TRUE; } #endif else - { - if (str) free(str); - return EINA_TRUE; - } + return EINA_TRUE; + return EINA_FALSE; } |