check for comp data deletion and block X calls

these are all invalid if client's comp data has already been cleared, so just let the compositor manipulate stuff without touching protolol
This commit is contained in:
Mike Blumenkrantz 2014-01-24 13:13:07 -05:00
parent d4abb904ad
commit a4c5629e7a
1 changed files with 10 additions and 0 deletions

View File

@ -603,6 +603,7 @@ _e_comp_x_client_stack(E_Client *ec)
if (ec->override && (!ec->internal)) return; //can't restack these if (ec->override && (!ec->internal)) return; //can't restack these
if (e_client_util_is_stacking(ec)) return; if (e_client_util_is_stacking(ec)) return;
if (!ec->comp_data) return;
if (ec->comp_data->unredirected_single) return; if (ec->comp_data->unredirected_single) return;
ecore_x_window_shadow_tree_flush(); ecore_x_window_shadow_tree_flush();
@ -705,6 +706,7 @@ _e_comp_x_evas_color_set_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even
E_Client *ec = data; E_Client *ec = data;
int a; int a;
if (!ec->comp_data) return;
evas_object_color_get(obj, NULL, NULL, NULL, &a); evas_object_color_get(obj, NULL, NULL, NULL, &a);
if (a == ec->netwm.opacity) return; if (a == ec->netwm.opacity) return;
ec->netwm.opacity_changed = 1; ec->netwm.opacity_changed = 1;
@ -716,6 +718,7 @@ _e_comp_x_evas_ping_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_inf
{ {
E_Client *ec = data; E_Client *ec = data;
if (!ec->comp_data) return;
ecore_x_netwm_ping_send(e_client_util_win_get(ec)); ecore_x_netwm_ping_send(e_client_util_win_get(ec));
} }
@ -724,6 +727,7 @@ _e_comp_x_evas_kill_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_inf
{ {
E_Client *ec = data; E_Client *ec = data;
if (!ec->comp_data) return;
ecore_x_kill(e_client_util_win_get(ec)); ecore_x_kill(e_client_util_win_get(ec));
} }
@ -732,6 +736,7 @@ _e_comp_x_evas_delete_request_cb(void *data, Evas_Object *obj EINA_UNUSED, void
{ {
E_Client *ec = data; E_Client *ec = data;
if (!ec->comp_data) return;
if (ec->netwm.ping) if (ec->netwm.ping)
e_client_ping(ec); e_client_ping(ec);
ecore_x_window_delete_request_send(e_client_util_win_get(ec)); ecore_x_window_delete_request_send(e_client_util_win_get(ec));
@ -744,6 +749,7 @@ _e_comp_x_evas_comp_hidden_cb(void *data, Evas_Object *obj EINA_UNUSED, void *ev
Eina_List *l; Eina_List *l;
Ecore_X_Window win; Ecore_X_Window win;
if (!ec->comp_data) return;
if (ec->comp_data->need_reparent) return; if (ec->comp_data->need_reparent) return;
win = _e_comp_x_client_window_get(ec); win = _e_comp_x_client_window_get(ec);
@ -772,6 +778,7 @@ _e_comp_x_evas_shade_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_in
Eina_List *l; Eina_List *l;
E_Client *tmp; E_Client *tmp;
if (!ec->comp_data) return;
EINA_LIST_FOREACH(ec->e.state.video_child, l, tmp) EINA_LIST_FOREACH(ec->e.state.video_child, l, tmp)
ecore_x_window_hide(e_client_util_pwin_get(tmp)); ecore_x_window_hide(e_client_util_pwin_get(tmp));
@ -784,6 +791,7 @@ _e_comp_x_evas_frame_recalc_cb(void *data, Evas_Object *obj, void *event_info)
E_Client *ec = data; E_Client *ec = data;
E_Comp_Object_Frame *fr = event_info; E_Comp_Object_Frame *fr = event_info;
if (!ec->comp_data) return;
if (evas_object_visible_get(obj)) if (evas_object_visible_get(obj))
_e_comp_x_client_frame_update(ec, fr->l, fr->r, fr->t, fr->b); _e_comp_x_client_frame_update(ec, fr->l, fr->r, fr->t, fr->b);
else else
@ -797,6 +805,7 @@ _e_comp_x_evas_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN
{ {
E_Client *ec = data; E_Client *ec = data;
if (!ec->comp_data) return;
if (ec->comp_data->moving && (!ec->comp_data->unredirected_single)) if (ec->comp_data->moving && (!ec->comp_data->unredirected_single))
{ {
if (ec->comp_data->move_counter++ < MOVE_COUNTER_LIMIT) return; if (ec->comp_data->move_counter++ < MOVE_COUNTER_LIMIT) return;
@ -813,6 +822,7 @@ _e_comp_x_evas_resize_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_i
{ {
E_Client *ec = data; E_Client *ec = data;
if (!ec->comp_data) return;
if (ec->shading || ec->shaded) return; if (ec->shading || ec->shaded) return;
if (!e_pixmap_size_changed(ec->pixmap, ec->client.w, ec->client.h)) return; if (!e_pixmap_size_changed(ec->pixmap, ec->client.w, ec->client.h)) return;