diff options
Diffstat (limited to 'src/bin/e_win.c')
-rw-r--r-- | src/bin/e_win.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/bin/e_win.c b/src/bin/e_win.c index aadea8637d..244c611243 100644 --- a/src/bin/e_win.c +++ b/src/bin/e_win.c @@ -7,6 +7,7 @@ static void _e_win_state_update(E_Win *win); static void _e_win_cb_move(Ecore_Evas *ee); static void _e_win_cb_resize(Ecore_Evas *ee); static void _e_win_cb_delete(Ecore_Evas *ee); +static void _e_win_cb_destroy(Ecore_Evas *ee); static void _e_win_cb_state(Ecore_Evas *ee); /* local subsystem globals */ @@ -231,6 +232,10 @@ _e_win_hide(void *obj) E_Win *win = obj; if (!win->client) return; + ecore_evas_callback_move_set(win->ecore_evas, NULL); + ecore_evas_callback_resize_set(win->ecore_evas, NULL); + ecore_evas_callback_delete_request_set(win->ecore_evas, NULL); + ecore_evas_callback_state_change_set(win->ecore_evas, NULL); if (win->client->visible) evas_object_hide(win->client->frame); e_object_del(E_OBJECT(win->client)); } @@ -285,6 +290,7 @@ e_win_new(E_Comp *c) ecore_evas_callback_move_set(win->ecore_evas, _e_win_cb_move); ecore_evas_callback_resize_set(win->ecore_evas, _e_win_cb_resize); ecore_evas_callback_delete_request_set(win->ecore_evas, _e_win_cb_delete); + ecore_evas_callback_destroy_set(win->ecore_evas, _e_win_cb_destroy); ecore_evas_callback_state_change_set(win->ecore_evas, _e_win_cb_state); win->evas = ecore_evas_get(win->ecore_evas); ecore_evas_name_class_set(win->ecore_evas, "E", "_e_internal_window"); @@ -309,7 +315,7 @@ e_win_new(E_Comp *c) win->max_aspect = 0.0; wins = eina_list_append(wins, win); - win->pointer = e_pointer_window_new(win->evas_win, 0); + win->pointer = e_pointer_window_new(win->evas_win, 1); return win; } @@ -329,9 +335,11 @@ e_win_show(E_Win *win) win->client->internal_ecore_evas = win->ecore_evas; if (win->state.no_remember) win->client->internal_no_remember = 1; win->client->internal_no_reopen = win->state.no_reopen; + win->client->changes.size = win->client->changes.pos = 1; + EC_CHANGED(win->client); } _e_win_prop_update(win); - evas_object_show(win->client->frame); + ecore_evas_show(win->ecore_evas); } EAPI void @@ -636,18 +644,6 @@ _e_win_free(E_Win *win) if (win->pointer) e_object_del(E_OBJECT(win->pointer)); - if (win->client) - { - ecore_evas_callback_move_set(win->ecore_evas, NULL); - ecore_evas_callback_resize_set(win->ecore_evas, NULL); - ecore_evas_callback_delete_request_set(win->ecore_evas, NULL); - ecore_evas_callback_state_change_set(win->ecore_evas, NULL); - } - else - { - e_canvas_del(win->ecore_evas); - ecore_evas_free(win->ecore_evas); - } wins = eina_list_remove(wins, win); free(win); } @@ -694,6 +690,20 @@ _e_win_cb_resize(Ecore_Evas *ee) } static void +_e_win_cb_destroy(Ecore_Evas *ee) +{ + E_Win *win; + + win = ecore_evas_data_get(ee, "E_Win"); + if (!win) return; + if (!win->client) return; + e_canvas_del(ee); + win->client->internal_ecore_evas = NULL; + if (win->client->visible) evas_object_hide(win->client->frame); + e_object_del(E_OBJECT(win->client)); +} + +static void _e_win_cb_delete(Ecore_Evas *ee) { E_Win *win; |