fix segv with delete_me states

SVN revision: 49659
This commit is contained in:
Hannes Janetzek 2010-06-13 01:05:24 +00:00
parent 8610b9eaa9
commit 51e29b8873
2 changed files with 17 additions and 10 deletions

View File

@ -756,7 +756,7 @@ _evry_window_new(E_Zone *zone, E_Zone_Edge edge)
e_win_borderless_set(win->ewin, 1); e_win_borderless_set(win->ewin, 1);
e_win_no_remember_set(win->ewin, 1); e_win_no_remember_set(win->ewin, 1);
e_win_placed_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->evas = e_win_evas_get(win->ewin);
win->zone = zone; win->zone = zone;
win->ewin->data = win; win->ewin->data = win;
@ -770,7 +770,7 @@ _evry_window_new(E_Zone *zone, E_Zone_Edge edge)
(!strcmp(shape_option, "1"))) (!strcmp(shape_option, "1")))
{ {
win->shaped = EINA_TRUE; win->shaped = EINA_TRUE;
if (e_config->use_composite) if (e_config->use_composite)
{ {
ecore_evas_alpha_set(win->ewin->ecore_evas, 1); ecore_evas_alpha_set(win->ewin->ecore_evas, 1);
@ -2531,23 +2531,28 @@ _clear_timer(void *data)
static void static void
_evry_state_clear(Evry_Window *win) _evry_state_clear(Evry_Window *win)
{ {
Evry_State *s;
Evry_View *v;
if (!win->state_clearing) if (!win->state_clearing)
return; return;
Evry_State *s = win->state_clearing; s = win->state_clearing;
Evry_View *v = s->view; win->state_clearing = NULL;
ecore_timer_del(s->clear_timer); ecore_timer_del(s->clear_timer);
s->clear_timer = NULL;
if (s->delete_me) if (s->delete_me)
{ {
v->destroy(v); if (s->view)
s->view->destroy(s->view);
s->clear_timer = NULL; s->clear_timer = NULL;
E_FREE(s->inp); E_FREE(s->inp);
E_FREE(s); E_FREE(s);
} }
else else if ((v = s->view))
{ {
s->clear_timer = NULL;
v->clear(v); v->clear(v);
if (v->o_list) 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 */ /* replay mouse down to allow direct sliding back */
if (win->mouse_button) if (win->mouse_button)
evas_event_feed_mouse_down(win->evas, win->mouse_button, 0, 0, NULL); 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); evas_object_show(v->o_list);
edje_object_signal_emit(v->o_list, "e,action,hide,list", "e"); 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) if (v->o_bar)
{ {

View File

@ -111,6 +111,9 @@ _tabs_update(Tab_View *v)
Evas_Object *o; Evas_Object *o;
int cur = 0, i = 0; int cur = 0, i = 0;
if (s->delete_me)
return;
edje_object_calc_force(v->o_tabs); edje_object_calc_force(v->o_tabs);
evas_object_geometry_get(v->o_tabs, &x, NULL, &w, NULL); evas_object_geometry_get(v->o_tabs, &x, NULL, &w, NULL);