diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index 63074c3ec..e5a098967 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -969,9 +969,10 @@ _e_comp_x_client_hide(E_Client *ec) if ((!ec->iconic) && (!ec->override)) ecore_x_window_prop_card32_set(e_client_util_win_get(ec), E_ATOM_MAPPED, &visible, 1); - if (ec->unredirected_single || ec->iconic) + ec->comp_data->iconic = ec->iconic && (!e_comp_object_mirror_visibility_check(ec->frame)); + if (ec->unredirected_single || ec->comp_data->iconic) ecore_x_window_hide(_e_comp_x_client_window_get(ec)); - if (ec->iconic) + if (ec->comp_data->iconic) e_hints_window_iconic_set(ec); } @@ -1003,10 +1004,11 @@ _e_comp_x_client_show(E_Client *ec) ecore_x_window_shadow_tree_flush(); if (!_e_comp_x_client_data_get(ec)->need_reparent) ecore_x_window_show(win); - if (ec->unredirected_single || ec->iconic) + if (ec->unredirected_single || ec->comp_data->iconic) { e_pixmap_clear(ec->pixmap); ecore_x_window_show(_e_comp_x_client_window_get(ec)); + ec->comp_data->iconic = 0; } if (!ec->override) e_hints_window_visible_set(ec); @@ -1169,6 +1171,26 @@ _e_comp_x_resize_request(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_E return ECORE_CALLBACK_RENEW; } +static void +_e_comp_x_evas_mirror_hidden(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + E_Client *ec = data; + + if ((!ec->iconic) || (!ec->comp_data->iconic)) return; + if (_e_comp_x_client_data_get(ec)) + _e_comp_x_client_hide(ec); +} + +static void +_e_comp_x_evas_mirror_visible(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + E_Client *ec = data; + + if ((!ec->iconic) || ec->comp_data->iconic) return; + if (_e_comp_x_client_data_get(ec)) + _e_comp_x_client_show(ec); +} + static void _e_comp_x_client_evas_init(E_Client *ec) { @@ -1191,6 +1213,8 @@ _e_comp_x_client_evas_init(E_Client *ec) evas_object_smart_callback_add(ec->frame, "color_set", _e_comp_x_evas_color_set_cb, ec); evas_object_smart_callback_add(ec->frame, "fullscreen_zoom", _e_comp_x_evas_fullscreen_zoom_cb, ec); evas_object_smart_callback_add(ec->frame, "unfullscreen_zoom", _e_comp_x_evas_unfullscreen_zoom_cb, ec); + evas_object_smart_callback_add(ec->frame, "visibility_force", _e_comp_x_evas_mirror_visible, ec); + evas_object_smart_callback_add(ec->frame, "visibility_normal", _e_comp_x_evas_mirror_hidden, ec); /* force apply this since we haven't set up our smart cb previously */ _e_comp_x_evas_comp_hidden_cb(ec, NULL, NULL); } diff --git a/src/bin/e_comp_x.h b/src/bin/e_comp_x.h index 28da7b5a8..30f8981f3 100644 --- a/src/bin/e_comp_x.h +++ b/src/bin/e_comp_x.h @@ -106,6 +106,7 @@ struct _E_Comp_X_Client_Data Eina_Bool evas_init : 1; Eina_Bool unredirected_single : 1; Eina_Bool fetch_gtk_frame_extents : 1; + Eina_Bool iconic : 1; }; E_API Eina_Bool e_comp_x_init(void);