summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/ecore_evas/engines/x/ecore_evas_x.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
index a107f66a6d..1a0ae1f4b8 100644
--- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c
+++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
@@ -49,6 +49,8 @@
# endif
#endif /* ! _WIN32 */
+#define ECORE_EVAS_X11_SELECTION 0x7F
+
#define EDBG(...) \
EINA_LOG(_ecore_evas_log_dom, EINA_LOG_LEVEL_DBG + 1, __VA_ARGS__);
@@ -75,6 +77,7 @@ static Eina_Bool wm_exists;
typedef struct _Ecore_Evas_Engine_Data_X11 Ecore_Evas_Engine_Data_X11;
typedef struct {
+ EINA_MAGIC;
Ecore_Evas_Selection_Callbacks callbacks;
Ecore_Evas_Selection_Buffer buffer;
Ecore_Evas *ee;
@@ -4053,6 +4056,11 @@ _eina_content_converter(char *target, void *data, int size EINA_UNUSED, void **d
{
Ecore_Evas_X11_Selection_Data *sdata = data;
Eina_Bool ret = EINA_FALSE;;
+
+ if (size != sizeof(Ecore_Evas_X11_Selection_Data)) return EINA_FALSE;
+
+ if (!EINA_MAGIC_CHECK(sdata, ECORE_EVAS_X11_SELECTION)) return EINA_FALSE;
+
if (eina_streq(target, "TARGETS") || eina_streq(target, "ATOM"))
{
//list all available types that we have currently
@@ -4327,6 +4335,7 @@ _ecore_evas_x_selection_window_init(Ecore_Evas *ee)
ecore_x_fixes_window_selection_notification_request(ee->prop.window, ecore_evas_selection_to_atom[i]);
edata->selection_data[i].ee = ee;
edata->selection_data[i].buffer = i;
+ EINA_MAGIC_SET(&edata->selection_data[i], ECORE_EVAS_X11_SELECTION);
}
ecore_x_dnd_aware_set(ee->prop.window, EINA_TRUE);
edata->init_job = ecore_job_add(_deliver_selection_changed, ee);