send wl surface enter/leave based on iconic state where appropriate

This commit is contained in:
Mike Blumenkrantz 2018-02-22 13:20:25 -05:00
parent 5de469a690
commit e1832b463e
2 changed files with 28 additions and 1 deletions

View File

@ -84,7 +84,7 @@ _e_comp_wl_surface_outputs_update(E_Client *ec)
E_Zone *zone;
int32_t obits = 0;
if (ec->visible)
if (ec->visible && (ec->comp_data->force_visible || (!ec->iconic)))
EINA_LIST_FOREACH(e_comp->zones, l, zone)
if (E_INTERSECTS(zone->x, zone->y, zone->w, zone->h,
ec->x, ec->y, ec->w, ec->h)) obits |= 1 << zone->id;
@ -1014,6 +1014,28 @@ _e_comp_wl_buffer_cb_destroy(struct wl_listener *listener, void *data EINA_UNUSE
free(buffer);
}
static void
_e_comp_wl_evas_mirror_hidden(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
E_Client *ec = data;
if (e_object_is_del(data)) return;
ec->comp_data->force_visible = 0;
if (!ec->iconic) return;
_e_comp_wl_surface_outputs_update(ec);
}
static void
_e_comp_wl_evas_mirror_visible(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
E_Client *ec = data;
if (e_object_is_del(data)) return;
ec->comp_data->force_visible = 1;
if (!ec->iconic) return;
_e_comp_wl_surface_outputs_update(ec);
}
static void
_e_comp_wl_client_evas_init(E_Client *ec)
{
@ -1081,6 +1103,10 @@ _e_comp_wl_client_evas_init(E_Client *ec)
_e_comp_wl_evas_cb_maximize_done, ec);
evas_object_smart_callback_add(ec->frame, "fullscreen",
_e_comp_wl_evas_cb_state_update, ec);
evas_object_smart_callback_add(ec->frame, "visibility_force",
_e_comp_wl_evas_mirror_visible, ec);
evas_object_smart_callback_add(ec->frame, "visibility_normal",
_e_comp_wl_evas_mirror_hidden, ec);
}
evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MOVE,
EVAS_CALLBACK_PRIORITY_AFTER,

View File

@ -379,6 +379,7 @@ struct _E_Comp_Wl_Client_Data
Eina_Bool maximize_anims_disabled E_BITFIELD;
Eina_Bool ssd_mouse_in E_BITFIELD;
Eina_Bool need_center E_BITFIELD;
Eina_Bool force_visible E_BITFIELD;
};
struct _E_Comp_Wl_Output