EINA_FALSE);
}
+static Eina_Bool
+_no_active_lockscreen_check(E_Client *ec)
+{
+ E_Client *ec2 = NULL;
+ int x, y, w, h;
+
+ if (!ec) return EINA_FALSE;
+
+ /* NB: to set fg_ec to lockscreen, return true if given ec is lockscreen itself. */
+ if (e_policy_client_is_lockscreen(ec)) return EINA_TRUE;
+
+ /* bottom to top */
+ for (ec2 = ec; ec2; ec2 = e_client_above_get(ec2))
+ {
+ if (e_object_is_del(E_OBJECT(ec2))) continue;
+ if (e_policy_client_is_lockscreen(ec2))
+ {
+ e_client_geometry_get(ec2, &x, &y, &w, &h);
+ if (E_CONTAINS(ec->zone->x, ec->zone->y, ec->zone->w, ec->zone->h,
+ x, y, w, h))
+ {
+ /* lockscreen is shown on top of given ec. */
+ return EINA_FALSE;
+ }
+ break;
+ }
+ }
+
+ /* there is no lockscreen on top of given ec. */
+ return EINA_TRUE;
+}
+
static void
_rot_client_cb_vis_prepare_foreground(void *data, Evas_Object *obj, void *event_info)
{
EDBG(ec, "Update Foreground Client '%s'(%p)", ec->icccm.name, ec);
if (e_policy_visibility_client_is_activity(ec))
{
- EDBG(ec, "Set the fg_ec to %x", e_client_util_win_get(ec));
- fg_ec = ec;
+ EDBG(ec, "Check ec %x to set fg_ec", e_client_util_win_get(ec));
+ if (_no_active_lockscreen_check(ec))
+ {
+ EDBG(ec, "Set the fg_ec to %x", e_client_util_win_get(ec));
+ fg_ec = ec;
- if (_camera_check(ec))
- _unlock_rot_for_fg_app(ec->zone);
- else
- _try_lock_rot_for_fg_app(ec->zone);
+ if (_camera_check(ec))
+ _unlock_rot_for_fg_app(ec->zone);
+ else
+ _try_lock_rot_for_fg_app(ec->zone);
+ }
}
_e_client_rotation_zone_set(ec->zone, ec, NULL);
if (e_policy_visibility_client_is_activity(ec))
{
- EDBG(ec, "Set the fg_ec to %x", e_client_util_win_get(ec));
- fg_ec = ec;
+ EDBG(ec, "Check ec %x to set fg_ec", e_client_util_win_get(ec));
+ if (_no_active_lockscreen_check(ec))
+ {
+ EDBG(ec, "Set the fg_ec to %x", e_client_util_win_get(ec));
+ fg_ec = ec;
- if (_camera_check(ec))
- _unlock_rot_for_fg_app(ec->zone);
- else
- _try_lock_rot_for_fg_app(ec->zone);
+ if (_camera_check(ec))
+ _unlock_rot_for_fg_app(ec->zone);
+ else
+ _try_lock_rot_for_fg_app(ec->zone);
+ }
}
_e_client_rotation_zone_set(ec->zone, ec, NULL);