}
static void
+_e_mod_effect_object_layer_up(E_Client *ec)
+{
+ int map_layer;
+
+ map_layer = e_comp_canvas_client_layer_map(ec->layer);
+ if (!_effect->layers[map_layer].obj)
+ {
+ _effect->layers[map_layer].obj = evas_object_rectangle_add(e_comp->evas);
+ evas_object_layer_set(_effect->layers[map_layer].obj, ec->layer + 1);
+ evas_object_name_set(_effect->layers[map_layer].obj, "layer_obj(effect)");
+ }
+
+ ec->layer_block = 1;
+ evas_object_layer_set(ec->frame, ec->layer + 1);
+}
+
+static void
+_e_mod_effect_object_layer_down(E_Client *ec)
+{
+ evas_object_layer_set(ec->frame, ec->layer);
+ ec->layer_block = 0;
+}
+
+static void
_e_mod_effect_pending_effect_start()
{
E_Client *ec;
if (v1 != v2)
{
- if (v2 && ec->visibility.obscured != E_VISIBILITY_UNOBSCURED)
+ if ((v2) && (ec->visibility.obscured != E_VISIBILITY_UNOBSCURED))
emission = "e,action,restack,show";
- else if (!v2 && ec->visibility.obscured == E_VISIBILITY_FULLY_OBSCURED)
+ else if ((!v2) && (ec->visibility.obscured == E_VISIBILITY_UNOBSCURED))
emission = "e,action,restack,hide";
}
+ else
+ {
+ E_Effect_Client *efc;
+ efc = _e_mod_effect_client_get(ec);
- EFFINF("Restack Effect Check v1(%d) -> v2(%d) obscured:%d emission:%s",
+ // TODO : it's for transients windows. wish using other check */
+ if ((efc) && (!efc->animating))
+ {
+ if ((v2) && (!ec->iconic) &&
+ (ec->visibility.obscured != E_VISIBILITY_UNOBSCURED))
+ emission = "e,action,restack,show";
+ else if ((!v2) && (ec->iconic) &&
+ (ec->visibility.obscured == E_VISIBILITY_UNOBSCURED))
+ emission = "e,action,restack,hide";
+ }
+ }
+
+ EFFINF("Restack Effect Check v1(%d) -> v2(%d) iconic:%d "
+ "obscured:%d(%d) emission:%s",
ec->pixmap, ec,
- v1, v2, ec->visibility.obscured, emission);
+ v1, v2, ec->iconic,
+ ec->visibility.obscured, ec->visibility.changed, emission);
return emission;
}
{
if (_e_mod_effect_client_get(ec))
{
- if (!eina_list_data_find(_effect->stack.cur, ec))
- _e_mod_effect_stack_update();
-
e_client_visibility_skip_set(ec, EINA_FALSE);
}
}
}
+ _e_mod_effect_stack_update();
e_comp_override_del();
}
{
if (_e_mod_effect_client_get(ec))
{
- evas_object_layer_set(ec->frame, ec->layer);
- ec->layer_block = 0;
+ _e_mod_effect_object_layer_down(ec);
e_client_visibility_skip_set(ec, EINA_FALSE);
evas_object_hide(ec->frame);
}
if (lowered)
{
- ec->layer_block = 1;
- evas_object_layer_set(ec->frame, ec->layer + 1);
+ _e_mod_effect_object_layer_up(ec);
e_client_visibility_skip_set(ec, EINA_TRUE);
}
if (group == E_EFFECT_GROUP_HOME)
{
E_Client *below;
+
+ v1 = _e_mod_effect_visibility_stack_check(ec, _effect->stack.old);
+ v2 = _e_mod_effect_visibility_stack_check(ec, _effect->stack.cur);
+
+ EFFINF("Uniconify Effect Check v1(%d) -> v2(%d) obscured:%d changed:%d",
+ ec->pixmap, ec,
+ v1, v2, ec->visibility.obscured, ec->visibility.changed);
+
+ if (v1 == v2) return EINA_FALSE;
+ if ((v2) && (ec->visibility.obscured == E_VISIBILITY_UNOBSCURED)) return EINA_FALSE;
+ if ((!v2) && (ec->visibility.obscured != E_VISIBILITY_UNOBSCURED)) return EINA_FALSE;
+
below = e_client_below_get(ec);
while (below)
{
group = _e_mod_effect_group_get(below);
if (group != E_EFFECT_GROUP_NORMAL) return EINA_FALSE;
- EFFINF("for HOME group do hide effect of %p",
+ EFFINF("Uniconify HOME group do hide effect of %p",
ec->pixmap, ec, below);
+
e_comp_object_signal_emit(below->frame, "e,action,restack,hide", "e");
return EINA_TRUE;
}
v1 = _e_mod_effect_visibility_stack_check(ec, _effect->stack.old);
v2 = _e_mod_effect_visibility_stack_check(ec, _effect->stack.cur);
+ EFFINF("Uniconify Effect Check v1(%d) -> v2(%d) obscured:%d changed:%d",
+ ec->pixmap, ec,
+ v1, v2, ec->visibility.obscured, ec->visibility.changed);
+
if (v1 == v2) return EINA_FALSE;
if ((v2) && (ec->visibility.obscured == E_VISIBILITY_UNOBSCURED)) return EINA_FALSE;
if ((!v2) && (ec->visibility.obscured != E_VISIBILITY_UNOBSCURED)) return EINA_FALSE;
{
E_Client *ec;
E_Effect_Group group;
+ Eina_Bool v1, v2;
if (!_effect) return EINA_FALSE;
if (group != E_EFFECT_GROUP_NORMAL) return EINA_FALSE;
if (!evas_object_visible_get(obj)) return EINA_FALSE;
- if (!_e_mod_effect_visibility_stack_check(ec, _effect->stack.cur)) return EINA_FALSE;
+
+ v1 = _e_mod_effect_visibility_stack_check(ec, _effect->stack.old);
+ v2 = _e_mod_effect_visibility_stack_check(ec, _effect->stack.cur);
+
+ EFFINF("Iconify Effect Check v1(%d) -> v2(%d) obscured:%d changed:%d",
+ ec->pixmap, ec,
+ v1, v2, ec->visibility.obscured, ec->visibility.changed);
+
+ if (v1 == v2) return EINA_FALSE;
+ if ((v2) && (ec->visibility.obscured == E_VISIBILITY_UNOBSCURED)) return EINA_FALSE;
+ if ((!v2) && (ec->visibility.obscured != E_VISIBILITY_UNOBSCURED)) return EINA_FALSE;
+
if (!_e_mod_effect_ref(ec)) return EINA_FALSE;
e_comp_override_add();
{
if (_e_mod_effect_client_get(ec))
{
- evas_object_layer_set(ec->frame, ec->layer);
- ec->layer_block = 0;
+ _e_mod_effect_object_layer_down(ec);
e_client_visibility_skip_set(ec, EINA_FALSE);
- _e_mod_effect_stack_update();
}
}
}
+ _e_mod_effect_stack_update();
e_comp_override_del();
}
{
if (_e_mod_effect_client_get(ec))
{
- evas_object_layer_set(ec->frame, ec->layer);
- ec->layer_block = 0;
+ _e_mod_effect_object_layer_down(ec);
e_client_visibility_skip_set(ec, EINA_FALSE);
- _e_mod_effect_stack_update();
-
e_comp_object_signal_emit(ec->frame,
"e,action,restack,finish", "e");
}
}
}
+ _e_mod_effect_stack_update();
e_comp_override_del();
}
_e_mod_effect_event_send(ec, EINA_FALSE, E_EFFECT_TYPE_RESTACK_HIDE);
_e_mod_effect_unref(ec);
}
-
e_comp_override_del();
}
e_comp_override_add();
- ec->layer_block = 1;
- evas_object_layer_set(ec->frame, ec->layer + 1);
+ _e_mod_effect_object_layer_up(ec);
e_client_visibility_skip_set(ec, EINA_TRUE);
_e_mod_effect_object_setup(ec);
e_comp_override_add();
- ec->layer_block = 1;
- evas_object_layer_set(ec->frame, ec->layer + 1);
+ _e_mod_effect_object_layer_up(ec);
e_client_visibility_skip_set(ec, EINA_TRUE);
_e_mod_effect_object_setup(ec);
if (!ec) return ECORE_CALLBACK_PASS_ON;
if (e_object_is_del(E_OBJECT(ec))) return ECORE_CALLBACK_PASS_ON;
+ EFFINF("Client restacked", ec->pixmap, ec);
+
_e_mod_effect_stack_update();
+ if (!_e_mod_effect_client_get(ec)) return ECORE_CALLBACK_PASS_ON;
+
if ((emission = _e_mod_effect_restack_effect_check(ec)))
e_comp_object_signal_emit(ec->frame, emission, "e");