diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 6a0d4adb9..07d69450f 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -401,6 +401,7 @@ _e_client_revert_focus(E_Client *ec) if (stopping) return; if (!ec->focused) return; + if (!ec->zone) return; desk = e_desk_current_get(ec->zone); if (ec->desk == desk) evas_object_focus_set(ec->frame, 0); @@ -963,8 +964,11 @@ _e_client_resize_handle(E_Client *ec) h = new_h; if (e_config->screen_limits == E_CLIENT_OFFSCREEN_LIMIT_ALLOW_NONE) { - w = MIN(w, ec->zone->w); - h = MIN(h, ec->zone->h); + if (ec->zone) + { + w = MIN(w, ec->zone->w); + h = MIN(h, ec->zone->h); + } } e_client_resize_limit(ec, &new_w, &new_h); if ((ec->resize_mode == E_POINTER_RESIZE_TL) || @@ -1066,8 +1070,11 @@ _e_client_resize_key_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev goto stop; if (e_config->screen_limits == E_CLIENT_OFFSCREEN_LIMIT_ALLOW_NONE) { - w = MIN(w, action_client->zone->w); - h = MIN(h, action_client->zone->h); + if (action_client->zone) + { + w = MIN(w, action_client->zone->w); + h = MIN(h, action_client->zone->h); + } } e_client_resize_limit(action_client, &w, &h); evas_object_resize(action_client->frame, w, h); @@ -1125,6 +1132,7 @@ _e_client_zones_layout_calc(E_Client *ec, int *zx, int *zy, int *zw, int *zh) int x, y, w, h; E_Zone *zone_above, *zone_below, *zone_left, *zone_right; + if (!ec->zone) return; x = ec->zone->x; y = ec->zone->y; w = ec->zone->w; @@ -1503,6 +1511,7 @@ _e_client_maximize(E_Client *ec, E_Maximize max) int ecx, ecy, ecw, ech; Eina_Bool override = ec->maximize_override; + if (!ec->zone) return; zx = zy = zw = zh = 0; ec->maximize_override = 1; @@ -1686,7 +1695,7 @@ _e_client_eval(E_Client *ec) if (!_e_client_hook_call(E_CLIENT_HOOK_EVAL_PRE_NEW_CLIENT, ec)) return; - if (ec->new_client && (!e_client_util_ignored_get(ec))) + if ((ec->new_client) && (!e_client_util_ignored_get(ec)) && (ec->zone)) { int zx = 0, zy = 0, zw = 0, zh = 0; @@ -2880,7 +2889,7 @@ e_client_mouse_move(E_Client *ec, Evas_Point *output) ec->shelf_fix.y = 0; ec->shelf_fix.modified = 0; evas_object_move(ec->frame, new_x, new_y); - e_zone_flip_coords_handle(ec->zone, output->x, output->y); + if (ec->zone) e_zone_flip_coords_handle(ec->zone, output->x, output->y); } else if (e_client_util_resizing_get(ec)) { @@ -2894,7 +2903,7 @@ e_client_mouse_move(E_Client *ec, Evas_Point *output) ec->drag.x = output->x; ec->drag.y = output->y; } - else + else if (ec->zone) { int dx, dy; @@ -2975,6 +2984,7 @@ e_client_res_change_geometry_restore(E_Client *ec) E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); if (!ec->pre_res_change.valid) return; if (ec->new_client) return; + if (!ec->zone) return; memcpy(&pre_res_change, &ec->pre_res_change, sizeof(pre_res_change)); @@ -3376,7 +3386,7 @@ e_client_focused_set(E_Client *ec) if (ec == focused) return; focused = ec; - if (ec) + if ((ec) && (ec->zone)) { ec->focused = 1; e_client_urgent_set(ec, 0); @@ -3403,7 +3413,7 @@ e_client_focused_set(E_Client *ec) } } - while (ec_unfocus) + while ((ec_unfocus) && (ec_unfocus->zone)) { ec_unfocus->want_focus = ec_unfocus->focused = 0; if (!e_object_is_del(E_OBJECT(ec_unfocus))) @@ -3533,6 +3543,7 @@ e_client_lost_windows_get(E_Zone *zone) EINA_LIST_FOREACH(e_comp->clients, l, ec) { if (ec->zone != zone) continue; + if (!ec->zone) continue; if (!E_INTERSECTS(ec->zone->x + loss_overlap, ec->zone->y + loss_overlap, @@ -3610,6 +3621,7 @@ e_client_maximize(E_Client *ec, E_Maximize max) E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (!(max & E_MAXIMIZE_DIRECTION)) max |= E_MAXIMIZE_BOTH; if ((ec->shaded) || (ec->shading)) return; @@ -3670,6 +3682,7 @@ e_client_unmaximize(E_Client *ec, E_Maximize max) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (!(max & E_MAXIMIZE_DIRECTION)) { CRI("BUG: Unmaximize call without direction!"); @@ -3781,6 +3794,7 @@ e_client_fullscreen(E_Client *ec, E_Fullscreen policy) E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if ((ec->shaded) || (ec->shading) || ec->fullscreen) return; if (ec->new_client) @@ -3858,6 +3872,7 @@ e_client_unfullscreen(E_Client *ec) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if ((ec->shaded) || (ec->shading)) return; if (!ec->fullscreen) return; ec->pre_res_change.valid = 0; @@ -3898,6 +3913,7 @@ e_client_iconify(E_Client *ec) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (ec->shading || ec->iconic) return; ec->iconic = 1; ec->want_focus = ec->take_focus = 0; @@ -3933,6 +3949,7 @@ e_client_uniconify(E_Client *ec) E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (ec->shading || (!ec->iconic)) return; desk = e_desk_current_get(ec->desk->zone); e_client_desk_set(ec, desk); @@ -3962,6 +3979,7 @@ e_client_urgent_set(E_Client *ec, Eina_Bool urgent) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; urgent = !!urgent; if (urgent == ec->urgent) return; @@ -3993,6 +4011,7 @@ e_client_stick(E_Client *ec) E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (ec->sticky) return; desk = ec->desk; ec->desk = NULL; @@ -4026,6 +4045,7 @@ e_client_unstick(E_Client *ec) E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; /* Set the desk before we unstick the client */ if (!ec->sticky) return; desk = e_desk_current_get(ec->zone); @@ -4109,6 +4129,7 @@ e_client_comp_hidden_set(E_Client *ec, Eina_Bool hidden) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; hidden = !!hidden; if (ec->comp_hidden == hidden) return; @@ -4122,6 +4143,7 @@ EAPI void e_client_act_move_keyboard(E_Client *ec) { EINA_SAFETY_ON_NULL_RETURN(ec); + if (!ec->zone) return; if (!_e_client_move_begin(ec)) return; @@ -4141,6 +4163,7 @@ EAPI void e_client_act_resize_keyboard(E_Client *ec) { EINA_SAFETY_ON_NULL_RETURN(ec); + if (!ec->zone) return; ec->resize_mode = E_POINTER_RESIZE_TL; if (!e_client_resize_begin(ec)) @@ -4161,6 +4184,7 @@ e_client_act_move_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (e_client_util_resizing_get(ec) || (ec->moving)) return; if (!_e_client_move_begin(ec)) return; @@ -4182,6 +4206,7 @@ e_client_act_move_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUSED { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (!ec->moving) return; e_zone_edge_enable(); _e_client_move_end(ec); @@ -4194,6 +4219,7 @@ e_client_act_resize_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (ec->lock_user_size || ec->shaded || ec->shading) return; if (e_client_util_resizing_get(ec) || (ec->moving)) return; if (ev) @@ -4258,6 +4284,7 @@ e_client_act_resize_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUS { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (e_client_util_resizing_get(ec)) { _e_client_resize_end(ec); @@ -4273,6 +4300,7 @@ e_client_act_menu_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev, int key) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (ec->border_menu) return; if (ev) e_int_client_menu_show(ec, ev->canvas.x, ev->canvas.y, key, ev->timestamp); @@ -4290,6 +4318,7 @@ e_client_act_close_begin(E_Client *ec) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (ec->lock_close) return; if (ec->icccm.delete_request) { @@ -4307,6 +4336,7 @@ e_client_act_kill_begin(E_Client *ec) { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (ec->internal) return; if (ec->lock_close) return; if ((ec->netwm.pid > 1) && (e_config->kill_process)) @@ -4518,6 +4548,7 @@ e_client_signal_move_begin(E_Client *ec, const char *sig, const char *src EINA_U { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (e_client_util_resizing_get(ec) || (ec->moving)) return; if (!_e_client_move_begin(ec)) return; @@ -4531,6 +4562,7 @@ e_client_signal_move_end(E_Client *ec, const char *sig EINA_UNUSED, const char * { E_OBJECT_CHECK(ec); E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); + if (!ec->zone) return; if (!ec->moving) return; _e_client_move_end(ec); e_zone_edge_enable(); @@ -4752,6 +4784,7 @@ e_client_pointer_warp_to_center(E_Client *ec) int x, y; E_Client *cec = NULL; + if (!ec->zone) return 0; if (e_config->disable_all_pointer_warps) return 0; /* Only warp the pointer if it is not already in the area of * the given border */ diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index b83fcaef4..57ecb3aac 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -1462,8 +1462,8 @@ _e_comp_intercept_focus(void *data, Evas_Object *obj, Eina_Bool focus) } /* FIXME: hack for deskflip animation: * dont update focus when sliding previous desk */ - if ((!ec->sticky) && - (ec->desk != e_desk_current_get(ec->desk->zone))) + if ((!ec->sticky) && (ec->desk) && + (ec->desk != e_desk_current_get(ec->desk->zone))) { return; }