summaryrefslogtreecommitdiff
path: root/src/bin/e_win.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/e_win.c')
-rw-r--r--src/bin/e_win.c38
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;