#include "evas_private.h"
static void evas_object_event_callback_clear(Evas_Object *obj);
+static void evas_event_callback_clear(Evas *e);
int _evas_event_counter = 0;
void
}
}
+static void
+evas_event_callback_clear(Evas *e)
+{
+ if (!e->callbacks) return;
+ if (!e->callbacks->deletions_waiting) return;
+ e->callbacks->deletions_waiting = 0;
+ evas_event_callback_list_post_free(&e->callbacks->callbacks);
+ if (!e->callbacks->callbacks)
+ {
+ free(e->callbacks);
+ e->callbacks = NULL;
+ }
+}
+
void
evas_object_event_callback_all_del(Evas_Object *obj)
{
}
e->callbacks->walking_list--;
if (!e->callbacks->walking_list)
- l_mod = NULL;
+ {
+ evas_event_callback_clear(e);
+ l_mod = NULL;
+ }
}
_evas_unwalk(e);
}
data = fn->data;
fn->delete_me = 1;
e->callbacks->deletions_waiting = 1;
+ if (!e->callbacks->walking_list)
+ evas_event_callback_clear(e);
return data;
}
}
data = fn->data;
fn->delete_me = 1;
e->callbacks->deletions_waiting = 1;
+ if (!e->callbacks->walking_list)
+ evas_event_callback_clear(e);
return data;
}
}
MAGIC_CHECK_END();
if (e->walking_list == 0) evas_render_idle_flush(e);
-
- if (e->walking_list > 0) return;
+ if (e->walking_list > 0) return;
if (!e->callbacks) return;
- if (!e->callbacks->deletions_waiting) return;
+ if (e->callbacks->deletions_waiting) return;
+
e->callbacks->deletions_waiting = 0;
evas_event_callback_list_post_free(&e->callbacks->callbacks);
if (!e->callbacks->callbacks)
for (j = 0; j < 3; j++)
{
while (gc->shared->tex.atlas[i][j])
- evas_gl_common_texture_free
- ((Evas_GL_Texture *)gc->shared->tex.atlas[i][j]);
+ {
+ evas_gl_common_texture_free
+ ((Evas_GL_Texture *)gc->shared->tex.atlas[i][j]);
+ gc->shared->tex.atlas[i][j] = NULL;
+ }
}
}
free(gc->shared);