From 6f39ca801ff98aa72c8619ce7b8cf5fbd1fb30ae Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 17 Jul 2003 10:01:13 +0000 Subject: [PATCH] bleh! SVN revision: 7183 --- legacy/evas/src/lib/canvas/evas_key_grab.c | 34 ++++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_key_grab.c b/legacy/evas/src/lib/canvas/evas_key_grab.c index 95970b9a41..3a5cbdac47 100644 --- a/legacy/evas/src/lib/canvas/evas_key_grab.c +++ b/legacy/evas/src/lib/canvas/evas_key_grab.c @@ -98,16 +98,31 @@ evas_key_grab_find(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask mod void evas_object_grabs_cleanup(Evas_Object *obj) { - while (obj->grabs) + if (obj->layer->evas->walking_grabs) { - Evas_Key_Grab *g; - - g = obj->grabs->data; - if (g->keyname) free(g->keyname); - free(g); - obj->layer->evas->grabs = evas_list_remove(obj->layer->evas->grabs, g); - obj->grabs = evas_list_remove(obj->grabs, g); - } + Evas_List *l; + + for (l = obj->grabs; l; l = l->next) + { + Evas_Key_Grab *g; + + g = l->data; + g->delete_me = 1; + } + } + else + { + while (obj->grabs) + { + Evas_Key_Grab *g; + + g = obj->grabs->data; + if (g->keyname) free(g->keyname); + free(g); + obj->layer->evas->grabs = evas_list_remove(obj->layer->evas->grabs, g); + obj->grabs = evas_list_remove(obj->grabs, g); + } + } } void @@ -119,6 +134,7 @@ evas_key_grab_free(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask mod g = evas_key_grab_find(obj, keyname, modifiers, not_modifiers, 0); if (!g) return; g->object->grabs = evas_list_remove(g->object->grabs, g); + obj->layer->evas->grabs = evas_list_remove(obj->layer->evas->grabs, g); if (g->keyname) free(g->keyname); free(g); }