From 51e29b887322e97da2bcad2ed2f0f42d2e098584 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sun, 13 Jun 2010 01:05:24 +0000 Subject: [PATCH] fix segv with delete_me states SVN revision: 49659 --- src/modules/everything/evry.c | 24 ++++++++++++++---------- src/modules/everything/evry_view_tabs.c | 3 +++ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/modules/everything/evry.c b/src/modules/everything/evry.c index 6bb7eb084..b2529b24e 100644 --- a/src/modules/everything/evry.c +++ b/src/modules/everything/evry.c @@ -756,7 +756,7 @@ _evry_window_new(E_Zone *zone, E_Zone_Edge edge) e_win_borderless_set(win->ewin, 1); e_win_no_remember_set(win->ewin, 1); e_win_placed_set(win->ewin, 1); - ecore_evas_override_set(win->ewin->ecore_evas, 1); + ecore_evas_override_set(win->ewin->ecore_evas, 1); win->evas = e_win_evas_get(win->ewin); win->zone = zone; win->ewin->data = win; @@ -770,7 +770,7 @@ _evry_window_new(E_Zone *zone, E_Zone_Edge edge) (!strcmp(shape_option, "1"))) { win->shaped = EINA_TRUE; - + if (e_config->use_composite) { ecore_evas_alpha_set(win->ewin->ecore_evas, 1); @@ -2531,23 +2531,28 @@ _clear_timer(void *data) static void _evry_state_clear(Evry_Window *win) { + Evry_State *s; + Evry_View *v; + if (!win->state_clearing) return; - Evry_State *s = win->state_clearing; - Evry_View *v = s->view; + s = win->state_clearing; + win->state_clearing = NULL; + ecore_timer_del(s->clear_timer); + s->clear_timer = NULL; if (s->delete_me) { - v->destroy(v); + if (s->view) + s->view->destroy(s->view); s->clear_timer = NULL; E_FREE(s->inp); E_FREE(s); } - else + else if ((v = s->view)) { - s->clear_timer = NULL; v->clear(v); if (v->o_list) @@ -2557,8 +2562,6 @@ _evry_state_clear(Evry_Window *win) } } - win->state_clearing = NULL; - /* replay mouse down to allow direct sliding back */ if (win->mouse_button) evas_event_feed_mouse_down(win->evas, win->mouse_button, 0, 0, NULL); @@ -2592,7 +2595,8 @@ _evry_view_hide(Evry_Window *win, Evry_View *v, int slide) evas_object_show(v->o_list); edje_object_signal_emit(v->o_list, "e,action,hide,list", "e"); - v->state->clear_timer = ecore_timer_add(0.3, _clear_timer, win); + /* FIXME get signal from theme when anim finished */ + v->state->clear_timer = ecore_timer_add(0.5, _clear_timer, win); if (v->o_bar) { diff --git a/src/modules/everything/evry_view_tabs.c b/src/modules/everything/evry_view_tabs.c index 488033ade..61f15499d 100644 --- a/src/modules/everything/evry_view_tabs.c +++ b/src/modules/everything/evry_view_tabs.c @@ -111,6 +111,9 @@ _tabs_update(Tab_View *v) Evas_Object *o; int cur = 0, i = 0; + if (s->delete_me) + return; + edje_object_calc_force(v->o_tabs); evas_object_geometry_get(v->o_tabs, &x, NULL, &w, NULL);