2013-04-15 Mike Blumenkrantz
* window borders now drawn on compositor canvas
+ * desk flip animations moved to edje
+ * added e_comp_win_effect* api
2013-04-05 Jérémy Zurcher
* added E_LIST_REVERSE_FREE macro
* added e_object_ref_debug_set
* added e_gadcon_repopulate
+ * added e_comp_win_effect* api
Config:
* Added option for disabling icons in menus
* Added option for disabling pointer warping when performing directional focus changes using winlist
* Don't rely on bash or zsh behavior when starting enlightenment_init and tempget.
* menus are now drawn directly on the compositor canvas
* window borders now drawn on compositor canvas
+ * desk flip animations moved to edje
Fixes:
* IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar.
}
}
+group { name: "e/comp/effects/none";
+ parts {
+ part { name: "e.swallow.content"; type: SWALLOW;
+ description { state: "default" 0.0;
+ }
+ }
+ }
+}
+
+/* non-auto effects are assumed to be run frame by frame by an animator */
+group { name: "e/comp/effects/move";
+ script {
+ public message(Msg_Type:type, id, ...) {
+ if ((type == MSG_INT_SET) && (id == 0)) {
+ /* set state */
+ new st;
+
+ st = getarg(2);
+ if (st == 1)
+ set_state(PART:"mover", "custom", 0.0);
+ else
+ set_state(PART:"mover", "default", 0.0);
+ } else if ((type == MSG_INT_SET) && (id == 1)) {
+ /* x,y coords to move to */
+ new x, y;
+
+ x = getarg(2);
+ y = getarg(3);
+
+ custom_state(PART:"mover", "default", 0.0);
+ set_state_val(PART:"mover", STATE_REL1_OFFSET, x, y);
+ set_state_val(PART:"mover", STATE_REL2_OFFSET, x, y);
+ }
+ }
+ }
+ parts {
+ part { name: "mover"; type: SPACER;
+ description { state: "default" 0.0;
+ }
+ }
+ part { name: "e.swallow.content"; type: SWALLOW;
+ description { state: "default" 0.0;
+ rel1.to: "mover";
+ rel2.to: "mover";
+ }
+ }
+ }
+ programs {
+ program {
+ name: "show";
+ signal: "e,action,go";
+ source: "e";
+ filter: "mover" "default";
+ action: STATE_SET "custom" 0.0;
+ transition: DECELERATE 0.4 CURRENT;
+ target: "mover";
+ after: "done";
+ }
+ program {
+ name: "hide";
+ signal: "e,action,go";
+ source: "e";
+ filter: "mover" "custom";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.4 CURRENT;
+ target: "mover";
+ after: "done";
+ }
+ program {
+ name: "stop";
+ signal: "e,action,stop";
+ source: "e";
+ action: ACTION_STOP;
+ target: "show";
+ target: "hide";
+ }
+ program {
+ name: "done";
+ action: SIGNAL_EMIT "e,action,done" "e";
+ }
+ }
+}
+
+/* auto effects are "start and forget" */
+group { name: "e/comp/effects/auto/pane";
+ //data.item: "noclip" "1"; //setting this prevents object from being clipped to its zone during effect
+ script {
+ public message(Msg_Type:type, id, ...) {
+ if ((type == MSG_INT_SET) && (id == 0)) {
+ /* set state */
+ new st;
+
+ st = getarg(2);
+ if (st == 1)
+ set_state(PART:"mover", "custom", 0.0);
+ else
+ set_state(PART:"mover", "default", 0.0);
+ } else if ((type == MSG_INT_SET) && (id == 1)) {
+ /* border geom[4] / screen size[2] / desk change direction[2] */
+ new x, y, sw, sh, dx, dy;
+
+ sw = getarg(6);
+ sh = getarg(7);
+ dx = getarg(8);
+ dy = getarg(9);
+
+ x = round(sw*dx*1.5);
+ y = round(sh*dy*1.5);
+
+ custom_state(PART:"mover", "default", 0.0);
+ set_state_val(PART:"mover", STATE_REL1_OFFSET, x, y);
+ set_state_val(PART:"mover", STATE_REL2_OFFSET, x, y);
+ }
+ }
+ }
+ parts {
+ part { name: "mover"; type: SPACER;
+ description { state: "default" 0.0;
+ }
+ }
+ part { name: "e.swallow.content"; type: SWALLOW;
+ description { state: "default" 0.0;
+ rel1.to: "mover";
+ rel2.to: "mover";
+ }
+ }
+ }
+ programs {
+ program {
+ name: "show";
+ signal: "e,action,go";
+ source: "e";
+ filter: "mover" "default";
+ action: STATE_SET "custom" 0.0;
+ transition: DECELERATE 0.4 CURRENT;
+ target: "mover";
+ after: "done";
+ }
+ program {
+ name: "hide";
+ signal: "e,action,go";
+ source: "e";
+ filter: "mover" "custom";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.4 CURRENT;
+ target: "mover";
+ after: "done";
+ }
+ program {
+ name: "stop";
+ signal: "e,action,stop";
+ source: "e";
+ action: ACTION_STOP;
+ target: "show";
+ target: "hide";
+ }
+ program {
+ name: "done";
+ action: SIGNAL_EMIT "e,action,done" "e";
+ }
+ }
+}
+
+group { name: "e/comp/effects/auto/diagonal";
+ inherit: "e/comp/effects/auto/pane";
+ script {
+ public message(Msg_Type:type, id, ...) {
+ if ((type == MSG_INT_SET) && (id == 0)) {
+ /* set state */
+ new st;
+
+ st = getarg(2);
+
+ if (st == 1)
+ set_state(PART:"mover", "custom", 0.0);
+ else
+ set_state(PART:"mover", "default", 0.0);
+ } else if ((type == MSG_INT_SET) && (id == 1)) {
+ /* border geom / screen size / desk change direction */
+ new x, y, w, h, sw, sh, mx, my, bx, by;
+ new Float:fx, Float:fy, Float:ang, Float:len, Float:lmax, Float:rad;
+
+ x = getarg(2);
+ y = getarg(3);
+ w = getarg(4);
+ h = getarg(5);
+ sw = getarg(6);
+ sh = getarg(7);
+ custom_state(PART:"mover", "default", 0.0);
+
+ mx = sw/2;
+ my = sh/2;
+
+ bx = x+(w/2)-mx;
+ by = y+(h/2)-my;
+ if (bx == 0) bx = 1;
+ if (by == 0) by = 1;
+ fx = bx/(w/2);
+ fy = by/(h/2);
+ ang = atan(fy/fx);
+ if (fx < 0.0)
+ ang = PI+ang;
+ len = sqrt((bx*bx)+(by*by));
+ lmax = sqrt(((sw/2)*(sw/2))+((sh/2)*(sh/2)));
+ rad = sqrt((w*w)+(h*h))/2.0;
+ x = round(cos(ang)*(lmax-len+rad));
+ y = round(sin(ang)*(lmax-len+rad));
+ set_state_val(PART:"mover", STATE_REL1_OFFSET, x, y);
+ set_state_val(PART:"mover", STATE_REL2_OFFSET, x, y);
+ }
+ }
+ }
+}
+
+group { name: "e/comp/effects/auto/zoom";
+ inherit: "e/comp/effects/auto/diagonal";
+ script {
+ public message(Msg_Type:type, id, ...) {
+ if ((type == MSG_INT_SET) && (id == 0)) {
+ /* set state */
+ new st;
+
+ st = getarg(2);
+ if (st == 1) {
+ /* starting from offscreen */
+ set_state_val(PART:"mover", STATE_REL1, 0.3, 0.3);
+ set_state_val(PART:"mover", STATE_REL2, 0.7, 0.7);
+ set_state(PART:"mover", "custom", 0.0);
+ set_state(PART:"clip", "hidden", 0.0);
+ } else {
+ /* starting from normal position */
+ set_state_val(PART:"mover", STATE_REL1, -1.7, -1.7);
+ set_state_val(PART:"mover", STATE_REL2, 1.7, 1.7);
+ set_state(PART:"mover", "default", 0.0);
+ set_state(PART:"clip", "default", 0.0);
+ }
+ } else if ((type == MSG_INT_SET) && (id == 1)) {
+ /* border geom / screen size / desk change direction */
+ new x, y, w, h, sw, sh, mx, my, bx, by;
+ new Float:fx, Float:fy, Float:ang, Float:len, Float:lmax, Float:rad;
+
+ x = getarg(2);
+ y = getarg(3);
+ w = getarg(4);
+ h = getarg(5);
+ sw = getarg(6);
+ sh = getarg(7);
+ custom_state(PART:"mover", "default", 0.0);
+
+ mx = sw/2;
+ my = sh/2;
+
+ bx = x+(w/2)-mx;
+ by = y+(h/2)-my;
+ if (bx == 0) bx = 1;
+ if (by == 0) by = 1;
+ fx = bx/(w/2);
+ fy = by/(h/2);
+ ang = atan(fy/fx);
+ if (fx < 0.0)
+ ang = PI+ang;
+ len = sqrt((bx*bx)+(by*by));
+ lmax = sqrt(((sw/2)*(sw/2))+((sh/2)*(sh/2)));
+ rad = sqrt((w*w)+(h*h))/2.0;
+ x = round(cos(ang)*(lmax-len+rad));
+ y = round(sin(ang)*(lmax-len+rad));
+ set_state_val(PART:"mover", STATE_REL1_OFFSET, x, y);
+ set_state_val(PART:"mover", STATE_REL2_OFFSET, x, y);
+ }
+ }
+ }
+ parts {
+ part { name: "clip"; type: RECT; insert_after: "mover";
+ description { state: "default";
+ rel1.to: "mover";
+ rel2.to: "mover";
+ color: 255 255 255 255;
+ }
+ description { state: "hidden";
+ rel1.to: "mover";
+ rel2.to: "mover";
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "e.swallow.content"; clip_to: "clip";
+ }
+ }
+ programs {
+ program {
+ name: "show2";
+ signal: "e,action,go";
+ source: "e";
+ filter: "mover" "default";
+ action: STATE_SET "hidden" 0.0;
+ transition: ACCELERATE 0.4 CURRENT;
+ target: "clip";
+ }
+ program {
+ name: "hide2";
+ signal: "e,action,go";
+ source: "e";
+ filter: "mover" "custom";
+ action: STATE_SET "default" 0.0;
+ transition: ACCELERATE 0.4 CURRENT;
+ target: "clip";
+ }
+ }
+}
+
group { name: "e/comp/default";
images.image: "win_shadow.png" COMP;
images.image: "win_glow.png" COMP;
rel2.to_x: "dots_start";
rel2.relative: 1.0 1.0;
align: 0.0 0.5;
+ fixed: 0 1;
box { layout: "horizontal";
padding: 4 0;
align: 0.0 0.5;
rel2.to_x: "dots_end";
rel2.relative: 0.0 1.0;
align: 1.0 0.5;
+ fixed: 0 1;
box { layout: "horizontal";
padding: 4 0;
align: 1.0 0.5;
bd->client_inset.t);
ecore_x_icccm_move_resize_send(bd->client.win,
- bd->x + bd->fx.x + bd->client_inset.l,
- bd->y + bd->fx.y + bd->client_inset.t,
+ bd->x + bd->client_inset.l,
+ bd->y + bd->client_inset.t,
bd->client.w,
bd->client.h);
}
if (y) *y = zy + (zh - bd->h) / 2;
}
-EAPI void
-e_border_fx_offset(E_Border *bd,
- int x,
- int y)
-{
- E_OBJECT_CHECK(bd);
- E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
-
- if ((x == bd->fx.x) && (y == bd->fx.y)) return;
- bd->fx.x = x;
- bd->fx.y = y;
-
- bd->changes.pos = 1;
- bd->changed = 1;
-
- if (bd->moving) _e_border_move_update(bd);
-}
-
static void
_e_border_move_resize_internal(E_Border *bd,
int x,
{
bd->mouse.last_down[button - 1].mx = output->x;
bd->mouse.last_down[button - 1].my = output->y;
- bd->mouse.last_down[button - 1].x = bd->x + bd->fx.x;
- bd->mouse.last_down[button - 1].y = bd->y + bd->fx.y;
+ bd->mouse.last_down[button - 1].x = bd->x;
+ bd->mouse.last_down[button - 1].y = bd->y;
bd->mouse.last_down[button - 1].w = bd->w;
bd->mouse.last_down[button - 1].h = bd->h;
}
else
{
- bd->moveinfo.down.x = bd->x + bd->fx.x;
- bd->moveinfo.down.y = bd->y + bd->fx.y;
+ bd->moveinfo.down.x = bd->x;
+ bd->moveinfo.down.y = bd->y;
bd->moveinfo.down.w = bd->w;
bd->moveinfo.down.h = bd->h;
}
{
bd->mouse.last_down[button - 1].mx = output->x;
bd->mouse.last_down[button - 1].my = output->y;
- bd->mouse.last_down[button - 1].x = bd->x + bd->fx.x;
- bd->mouse.last_down[button - 1].y = bd->y + bd->fx.y;
+ bd->mouse.last_down[button - 1].x = bd->x;
+ bd->mouse.last_down[button - 1].y = bd->y;
bd->mouse.last_down[button - 1].w = bd->w;
bd->mouse.last_down[button - 1].h = bd->h;
}
else
{
- bd->moveinfo.down.x = bd->x + bd->fx.x;
- bd->moveinfo.down.y = bd->y + bd->fx.y;
+ bd->moveinfo.down.x = bd->x;
+ bd->moveinfo.down.y = bd->y;
bd->moveinfo.down.w = bd->w;
bd->moveinfo.down.h = bd->h;
}
{
bd->mouse.last_up[button - 1].mx = output->x;
bd->mouse.last_up[button - 1].my = output->y;
- bd->mouse.last_up[button - 1].x = bd->x + bd->fx.x;
- bd->mouse.last_up[button - 1].y = bd->y + bd->fx.y;
+ bd->mouse.last_up[button - 1].x = bd->x;
+ bd->mouse.last_up[button - 1].y = bd->y;
}
bd->mouse.current.mx = output->x;
bd->mouse.current.my = output->y;
{
bd->mouse.last_up[button - 1].mx = output->x;
bd->mouse.last_up[button - 1].my = output->y;
- bd->mouse.last_up[button - 1].x = bd->x + bd->fx.x;
- bd->mouse.last_up[button - 1].y = bd->y + bd->fx.y;
+ bd->mouse.last_up[button - 1].x = bd->x;
+ bd->mouse.last_up[button - 1].y = bd->y;
}
bd->drag.start = 0;
ecore_x_window_move(tmp->win,
bd->x +
bd->client_inset.l +
- bd->fx.x +
tmp->client.e.state.video_position.x,
bd->y +
bd->client_inset.t +
- bd->fx.y +
tmp->client.e.state.video_position.y);
}
if (bd->client.e.state.video)
ecore_x_window_move(bd->win,
parent->x +
parent->client_inset.l +
- parent->fx.x +
bd->client.e.state.video_position.x,
parent->y +
parent->client_inset.t +
- parent->fx.y +
bd->client.e.state.video_position.y);
}
else if ((bd->post_move) && (bd->post_resize))
{
ecore_x_window_move_resize(bd->win,
- bd->x + bd->fx.x + bd->client_inset.l,
- bd->y + bd->fx.y + bd->client_inset.t,
+ bd->x + bd->client_inset.l,
+ bd->y + bd->client_inset.t,
bd->w - (bd->client_inset.l + bd->client_inset.r),
bd->h - (bd->client_inset.t + bd->client_inset.b));
}
else if (bd->post_move)
{
- ecore_x_window_move(bd->win, bd->x + bd->fx.x + bd->client_inset.l, bd->y + bd->fx.y + bd->client_inset.t);
+ ecore_x_window_move(bd->win, bd->x + bd->client_inset.l, bd->y + bd->client_inset.t);
}
else if (bd->post_resize)
{
bd->win,
bd->client.e.state.video_parent_border->x +
bd->client.e.state.video_parent_border->client_inset.l +
- bd->client.e.state.video_parent_border->fx.x +
bd->client.e.state.video_position.x,
bd->client.e.state.video_parent_border->y +
bd->client.e.state.video_parent_border->client_inset.t +
- bd->client.e.state.video_parent_border->fx.y +
bd->client.e.state.video_position.y,
bd->w, bd->h);
}
ecore_x_window_move(bd->win,
bd->client.e.state.video_parent_border->x +
bd->client.e.state.video_parent_border->client_inset.l +
- bd->client.e.state.video_parent_border->fx.x +
bd->client.e.state.video_position.x,
bd->client.e.state.video_parent_border->y +
bd->client.e.state.video_parent_border->client_inset.t +
- bd->client.e.state.video_parent_border->fx.y +
bd->client.e.state.video_position.y);
bd->client.e.state.video_position.updated = 0;
}
EINA_LIST_FOREACH(bd->client.e.state.video_child, l, tmp)
ecore_x_window_move(tmp->win,
- bd->x + bd->fx.x + bd->client_inset.l + tmp->client.e.state.video_position.x,
- bd->y + bd->fx.y + bd->client_inset.t + tmp->client.e.state.video_position.y);
+ bd->x + bd->client_inset.l + tmp->client.e.state.video_position.x,
+ bd->y + bd->client_inset.t + tmp->client.e.state.video_position.y);
}
if ((!bd->shaded) || (bd->shading))
bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job, bd);
bd->post_move = 1;
- e_container_shape_move(bd->shape, bd->x + bd->fx.x + bd->client_inset.l, bd->y + bd->fx.y + bd->client_inset.t);
+ e_container_shape_move(bd->shape, bd->x + bd->client_inset.l, bd->y + bd->client_inset.t);
_e_border_client_move_resize_send(bd);
if (bd->cur_mouse_action)
{
- bd->moveinfo.down.x = bd->x + bd->fx.x;
- bd->moveinfo.down.y = bd->y + bd->fx.y;
+ bd->moveinfo.down.x = bd->x;
+ bd->moveinfo.down.y = bd->y;
bd->moveinfo.down.w = bd->w;
bd->moveinfo.down.h = bd->h;
bd->mouse.current.mx = x;
struct
{
- int x, y;
- struct
- {
- int x, y;
- double t;
- } start;
- } fx;
-
- struct
- {
int l, r, t, b;
Eina_Bool calc : 1; // inset has been calculated
} client_inset;
EAPI void e_border_move_without_border(E_Border *bd, int x, int y);
EAPI void e_border_center(E_Border *bd);
EAPI void e_border_center_pos_get(E_Border *bd, int *x, int *y);
-EAPI void e_border_fx_offset(E_Border *bd, int x, int y);
EAPI void e_border_resize(E_Border *bd, int w, int h);
EAPI void e_border_resize_without_border(E_Border *bd, int w, int h);
EAPI void e_border_move_resize(E_Border *bd, int x, int y, int w, int h);
static void
_e_comp_child_show(E_Comp_Win *cw)
{
- evas_object_show(cw->shobj);
+ evas_object_show(cw->effect_obj);
if (cw->bd)
{
Eina_List *l;
tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win));
if (!tcw) continue;
- evas_object_show(tcw->shobj);
+ evas_object_show(tcw->effect_obj);
}
}
}
static void
_e_comp_child_hide(E_Comp_Win *cw)
{
- evas_object_hide(cw->shobj);
+ evas_object_hide(cw->effect_obj);
if (cw->bd)
{
Eina_List *l;
tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win));
if (!tcw) continue;
- evas_object_hide(tcw->shobj);
+ evas_object_hide(tcw->effect_obj);
}
}
}
static void
_e_comp_win_layout_populate(E_Comp_Win *cw)
{
- e_layout_pack(cw->c->layout, cw->shobj);
+ e_layout_pack(cw->c->layout, cw->effect_obj);
}
static void
if (cwp)
{
- e_layout_child_raise_above(cw->shobj, cwp->shobj);
+ e_layout_child_raise_above(cw->effect_obj, cwp->effect_obj);
cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(cw));
cw->c->wins = eina_inlist_append_relative(cw->c->wins, EINA_INLIST_GET(cw), EINA_INLIST_GET(cwp));
}
else if (cwn)
{
- e_layout_child_raise_above(cw->shobj, cwn->shobj);
+ e_layout_child_raise_above(cw->effect_obj, cwn->effect_obj);
cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(cw));
cw->c->wins = eina_inlist_append_relative(cw->c->wins, EINA_INLIST_GET(cw), EINA_INLIST_GET(cwn));
}
tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win));
if (!tcw) continue;
- e_layout_child_lower_below(tcw->shobj, cw->shobj);
+ e_layout_child_lower_below(tcw->effect_obj, cw->effect_obj);
cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(tcw));
cw->c->wins = eina_inlist_prepend_relative(cw->c->wins, EINA_INLIST_GET(tcw), EINA_INLIST_GET(cw));
}
w = cw->pw, h = cw->ph;
if (cw->not_in_layout)
{
- evas_object_resize(cw->shobj, w, h);
- evas_object_move(cw->shobj, x, y);
+ evas_object_resize(cw->effect_obj, w, h);
+ evas_object_move(cw->effect_obj, x, y);
}
else
{
- e_layout_child_move(cw->shobj, x, y);
- e_layout_child_resize(cw->shobj, w, h);
+ e_layout_child_move(cw->effect_obj, x, y);
+ e_layout_child_resize(cw->effect_obj, w, h);
}
}
return;
}
- // evas_object_move(cw->shobj, cw->x, cw->y);
+ // evas_object_move(cw->effect_obj, cw->x, cw->y);
// was cw->w / cw->h
- // evas_object_resize(cw->shobj, cw->pw, cw->ph);
+ // evas_object_resize(cw->effect_obj, cw->pw, cw->ph);
_e_comp_win_geometry_update(cw);
if ((cw->c->gl) && (conf->texture_from_pixmap) &&
if (/*(!cw->update) &&*/ (cw->visible) && (cw->dmg_updates >= 1) &&
(cw->show_ready) && (!cw->bd || cw->bd->visible))
{
- if (!evas_object_visible_get(cw->shobj))
+ if (!evas_object_visible_get(cw->effect_obj))
{
if (!cw->hidden_override)
{
}
cw = cwf;
- INF("NOCOMP win %x shobj %p", cw->win, cw->shobj);
+ INF("NOCOMP win %x effect_obj %p", cw->win, cw->effect_obj);
_e_comp_win_release(cw);
_e_comp_win_adopt(cw);
- INF("restore comp %x --- %p", cw->win, cw->shobj);
+ INF("restore comp %x --- %p", cw->win, cw->effect_obj);
if (cw->visible)
{
if (cw->shape) cw->shape->comp_win = cw;
if (conf->grab) ecore_x_grab();
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+ cw->effect_obj = edje_object_add(c->evas);
+ e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", "e/comp/effects/none");
cw->shobj = edje_object_add(c->evas);
_e_comp_win_shadow_setup(cw);
+ edje_object_part_swallow(cw->effect_obj, "e.swallow.content", cw->shobj);
edje_object_signal_callback_add(cw->shobj, "e,action,show,done", "e", _e_comp_show_done, cw);
edje_object_signal_callback_add(cw->shobj, "e,action,hide,done", "e", _e_comp_hide_done, cw);
- evas_object_geometry_get(obj, &x, &y, &w, &h);
_e_comp_win_configure(cw, x, y, w, h, 0);
if (!nolayout) _e_comp_win_layout_populate(cw);
- if (cw->bd) evas_object_data_set(cw->shobj, "border", cw->bd);
- else if (cw->pop)
- evas_object_data_set(cw->shobj, "popup", cw->pop);
+ if (cw->pop)
+ {
+ evas_object_data_set(cw->shobj, "popup", cw->pop);
+ evas_object_data_set(cw->effect_obj, "popup", cw->pop);
+ evas_object_name_set(cw->shobj, "cw->shobj::POPUP");
+ evas_object_name_set(cw->effect_obj, "cw->effect_obj::POPUP");
+ }
else if (cw->menu)
- evas_object_data_set(cw->shobj, "menu", cw->menu);
+ {
+ evas_object_data_set(cw->shobj, "menu", cw->menu);
+ evas_object_data_set(cw->effect_obj, "menu", cw->menu);
+ evas_object_name_set(cw->shobj, "cw->shobj::MENU");
+ evas_object_name_set(cw->effect_obj, "cw->effect_obj::MENU");
+ }
cw->pending_count++;
_e_comp_event_source_add(cw);
+ evas_object_data_set(cw->effect_obj, "comp_win", cw);
evas_object_data_set(cw->shobj, "comp_win", cw);
evas_object_data_set(cw->obj, "comp_win", cw);
cw->damage = ecore_x_damage_new
(cw->win, ECORE_X_DAMAGE_REPORT_DELTA_RECTANGLES);
eina_hash_add(damages, e_util_winid_str_get(cw->damage), cw);
+ cw->effect_obj = edje_object_add(c->evas);
+ e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", "e/comp/effects/none");
cw->shobj = edje_object_add(c->evas);
cw->obj = evas_object_image_filled_add(c->evas);
evas_object_image_colorspace_set(cw->obj, EVAS_COLORSPACE_ARGB8888);
else evas_object_image_alpha_set(cw->obj, 0);
_e_comp_win_shadow_setup(cw);
+ edje_object_part_swallow(cw->effect_obj, "e.swallow.content", cw->shobj);
edje_object_signal_callback_add(cw->shobj, "e,action,show,done", "e", _e_comp_show_done, cw);
edje_object_signal_callback_add(cw->shobj, "e,action,hide,done", "e", _e_comp_hide_done, cw);
if (cw->bd)
{
evas_object_data_set(cw->shobj, "border", cw->bd);
+ evas_object_data_set(cw->effect_obj, "border", cw->bd);
evas_object_name_set(cw->shobj, "cw->shobj::BORDER");
+ evas_object_name_set(cw->effect_obj, "cw->effect_obj::BORDER");
}
- else if (cw->pop)
- {
- evas_object_data_set(cw->shobj, "popup", cw->pop);
- evas_object_name_set(cw->shobj, "cw->shobj::POPUP");
- }
- else if (cw->menu)
+ else
{
- evas_object_data_set(cw->shobj, "menu", cw->menu);
- evas_object_name_set(cw->shobj, "cw->shobj::MENU");
+ evas_object_name_set(cw->shobj, "cw->shobj::WINDOW");
+ evas_object_name_set(cw->effect_obj, "cw->effect_obj::WINDOW");
}
- else
- evas_object_name_set(cw->shobj, "cw->shobj::WINDOW");
evas_object_name_set(cw->obj, "cw->obj");
}
else
{
- cw->shobj = evas_object_rectangle_add(c->evas);
+ cw->effect_obj = evas_object_rectangle_add(c->evas);
_e_comp_win_layout_populate(cw);
- evas_object_color_set(cw->shobj, 0, 0, 0, 0);
+ evas_object_color_set(cw->effect_obj, 0, 0, 0, 0);
}
- evas_object_data_set(cw->shobj, "win", (void *)((unsigned long)cw->win));
- evas_object_data_set(cw->shobj, "comp_win", cw);
+ if (cw->shobj) evas_object_data_set(cw->shobj, "comp_win", cw);
+ evas_object_data_set(cw->effect_obj, "comp_win", cw);
c->wins_invalid = 1;
c->wins = eina_inlist_append(c->wins, EINA_INLIST_GET(cw));
evas_object_event_callback_del_full(cw->obj, EVAS_CALLBACK_FOCUS_IN, _e_comp_injected_win_focus_in_cb, cw);
evas_object_event_callback_del_full(cw->obj, EVAS_CALLBACK_FOCUS_OUT, _e_comp_injected_win_focus_out_cb, cw);
}
- if (cw->obj)
- {
- evas_object_del(cw->obj);
- cw->obj = NULL;
- }
- if (cw->shobj)
- {
- evas_object_del(cw->shobj);
- cw->shobj = NULL;
- }
+ E_FREE_FUNC(cw->obj, evas_object_del);
+ E_FREE_FUNC(cw->shobj, evas_object_del);
+ E_FREE_FUNC(cw->effect_obj, evas_object_del);
if (cw->free_shape) E_FREE_FUNC(cw->shape, e_object_del);
cw->defer_hide = 0;
cw->force = 0;
_e_comp_child_hide(cw);
+ edje_object_signal_emit(cw->shobj, "e,state,visible,off", "e");
if (cw->update_timeout)
{
DBG(" [0x%x] mov %4i %4i", cw->win, x, y);
cw->x = x;
cw->y = y;
- // evas_object_move(cw->shobj, cw->x, cw->y);
+ // evas_object_move(cw->effect_obj, cw->x, cw->y);
moved = EINA_TRUE;
}
cw->hidden.x = x;
cw->h = h;
cw->needpix = 1;
// was cw->w / cw->h
- // evas_object_resize(cw->shobj, cw->pw, cw->ph);
+ // evas_object_resize(cw->effect_obj, cw->pw, cw->ph);
resized = EINA_TRUE;
_e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0);
#else
{
cw->needpix = 1;
// was cw->w / cw->h
- // evas_object_resize(cw->shobj, cw->pw, cw->ph);
+ // evas_object_resize(cw->effect_obj, cw->pw, cw->ph);
resized = EINA_TRUE;
_e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0);
}
cw->border = border;
cw->needpix = 1;
// was cw->w / cw->h
- // evas_object_resize(cw->shobj, cw->pw, cw->ph);
+ // evas_object_resize(cw->effect_obj, cw->pw, cw->ph);
resized = EINA_TRUE;
_e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0);
}
cw->h = h;
cw->needpix = 1;
// was cw->w / cw->h
- // evas_object_resize(cw->shobj, cw->pw, cw->ph);
+ // evas_object_resize(cw->effect_obj, cw->pw, cw->ph);
resized = EINA_TRUE;
if (!cw->real_obj) _e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0);
}
{
cw->border = border;
cw->needpix = 1;
- // evas_object_resize(cw->shobj, cw->pw, cw->ph);
+ // evas_object_resize(cw->effect_obj, cw->pw, cw->ph);
resized = EINA_TRUE;
_e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0);
}
cw->h = cw->hidden.h;
cw->needpix = 1;
// was cw->w / cw->h
- // evas_object_resize(cw->shobj, cw->pw, cw->ph);
+ // evas_object_resize(cw->effect_obj, cw->pw, cw->ph);
_e_comp_win_geometry_update(cw);
_e_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0);
}
{
cw = e_comp_win_find(ignore[i]);
if (cw)
- ignore_list = eina_list_append(ignore_list, cw->shobj);
+ ignore_list = eina_list_append(ignore_list, cw->effect_obj);
}
}
o = e_layout_top_child_at_xy_get(c->layout, x, y, ignore_list);
else
{
cw = e_comp_object_add(c, obj, evas_object_data_get(obj, "eobj"));
- evas_object_layer_set(cw->shobj, comp_layer);
+ evas_object_layer_set(cw->effect_obj, comp_layer);
if (comp_layer > E_COMP_CANVAS_LAYER_LAYOUT)
e_comp_override_add(c);
}
}
}
+EAPI void
+e_comp_win_effect_set(E_Comp_Win *cw, const char *effect)
+{
+ char buf[4096];
+ Eina_Stringshare *grp;
+
+ EINA_SAFETY_ON_NULL_RETURN(cw);
+ EINA_SAFETY_ON_NULL_RETURN(effect);
+ EINA_SAFETY_ON_TRUE_RETURN(!effect[0]);
+ if (!cw->shobj) return; //input window
+
+ snprintf(buf, sizeof(buf), "e/comp/effects/%s", effect);
+ edje_object_file_get(cw->effect_obj, NULL, &grp);
+ if (!e_util_strcmp(buf, grp)) return;
+ if (!e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", buf))
+ {
+ snprintf(buf, sizeof(buf), "e/comp/effects/auto/%s", effect);
+ if (!e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", buf))
+ if (!e_theme_edje_object_set(cw->effect_obj, "base/theme/comp", "e/comp/effects/none")) return;
+ }
+ if (cw->bd && cw->bd->bg_object)
+ {
+ edje_object_part_swallow(cw->bd->bg_object, "e.swallow.client", cw->obj);
+ edje_object_part_swallow(cw->shobj, "e.swallow.content", cw->bd->bg_object);
+ }
+ else
+ edje_object_part_swallow(cw->shobj, "e.swallow.content", cw->obj);
+ edje_object_part_swallow(cw->effect_obj, "e.swallow.content", cw->shobj);
+ if (cw->effect_clip)
+ {
+ evas_object_clip_unset(cw->effect_obj);
+ cw->effect_clip = 0;
+ }
+ cw->effect_clip_able = !edje_object_data_get(cw->shobj, "noclip");
+}
+
+EAPI void
+e_comp_win_effect_params_set(E_Comp_Win *cw, int id, int *params, unsigned int count)
+{
+ Edje_Message_Int_Set *msg;
+ unsigned int x;
+
+ EINA_SAFETY_ON_NULL_RETURN(cw);
+ EINA_SAFETY_ON_NULL_RETURN(params);
+ EINA_SAFETY_ON_FALSE_RETURN(count);
+
+ msg = alloca(sizeof(Edje_Message_Int_Set) + ((count - 1) * sizeof(int)));
+ msg->count = (int)count;
+ for (x = 0; x < count; x++)
+ msg->val[x] = params[x];
+ edje_object_message_send(cw->effect_obj, EDJE_MESSAGE_INT_SET, id, msg);
+ edje_object_message_signal_process(cw->effect_obj);
+}
+
+static void
+_e_comp_win_effect_end_cb(void *data, Evas_Object *obj, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
+{
+ edje_object_signal_callback_del(obj, "e,action,done", "e", data);
+ edje_object_signal_callback_del_full(obj, "e,action,done", "e", _e_comp_win_effect_end_cb, data);
+}
+
+EAPI void
+e_comp_win_effect_start(E_Comp_Win *cw, Edje_Signal_Cb end_cb, const void *end_data)
+{
+ EINA_SAFETY_ON_NULL_RETURN(cw);
+ EINA_SAFETY_ON_FALSE_RETURN(cw->bd); //FIXME
+ edje_object_signal_callback_del(cw->effect_obj, "e,action,done", "e", end_cb);
+ edje_object_signal_callback_del(cw->effect_obj, "e,action,done", "e", _e_comp_win_effect_end_cb);
+ if (cw->effect_clip)
+ {
+ evas_object_clip_unset(cw->effect_obj);
+ cw->effect_clip = 0;
+ }
+ if (cw->effect_clip_able)
+ {
+ if (cw->bd->zone)
+ {
+ evas_object_clip_set(cw->effect_obj, cw->bd->zone->bg_clip_object);
+ cw->effect_clip = 1;
+ }
+ }
+ /* this is a stack, so the callbacks added first will be called last */
+ edje_object_signal_callback_add(cw->effect_obj, "e,action,done", "e", _e_comp_win_effect_end_cb, end_cb);
+ edje_object_signal_callback_add(cw->effect_obj, "e,action,done", "e", end_cb, (void*)end_data);
+ edje_object_signal_emit(cw->effect_obj, "e,action,go", "e");
+}
+
+EAPI void
+e_comp_win_effect_stop(E_Comp_Win *cw, Edje_Signal_Cb end_cb)
+{
+ EINA_SAFETY_ON_NULL_RETURN(cw);
+ if (cw->effect_clip)
+ {
+ evas_object_clip_unset(cw->effect_obj);
+ cw->effect_clip = 0;
+ }
+ edje_object_signal_emit(cw->effect_obj, "e,action,stop", "e");
+ edje_object_signal_callback_del(cw->effect_obj, "e,action,done", "e", end_cb);
+ edje_object_signal_callback_del(cw->effect_obj, "e,action,done", "e", _e_comp_win_effect_end_cb);
+}
+
EAPI unsigned int
e_comp_e_object_layer_get(const E_Object *obj)
{
int depth; // window depth
Evas_Object *obj; // composite object
Evas_Object *shobj; // shadow object
+ Evas_Object *effect_obj; // effects object
E_Object *eobj; // internal e object
E_Comp_Win *cw_above; // comp win that should always be stacked above this one
Eina_List *stack_below; // list of objects to keep stacked below this one
Eina_Bool free_shape : 1; // container shape needs to be freed
Eina_Bool real_obj : 1; // real object (for dummy comp wins)
Eina_Bool not_in_layout : 1; // object is a dummy not in comp layout
+
+ Eina_Bool effect_clip : 1; //effect_obj is clipped
+ Eina_Bool effect_clip_able : 1; //effect_obj will be clipped for effects
};
struct E_Event_Comp
EAPI void e_comp_override_del(E_Comp *c);
EAPI void e_comp_override_add(E_Comp *c);
+EAPI void e_comp_win_effect_set(E_Comp_Win *cw, const char *effect);
+EAPI void e_comp_win_effect_params_set(E_Comp_Win *cw, int id, int *params, unsigned int count);
+EAPI void e_comp_win_effect_start(E_Comp_Win *cw, Edje_Signal_Cb end_cb, const void *end_data);
+EAPI void e_comp_win_effect_stop(E_Comp_Win *cw, Edje_Signal_Cb end_cb);
+
EAPI E_Comp_Win *e_comp_win_find_client_win(Ecore_X_Window win);
EAPI E_Comp_Win *e_comp_win_find(Ecore_X_Window win);
EAPI const Eina_List *e_comp_win_list_get(E_Comp *c);
E_CONFIG_VAL(D, T, icon_theme_overrides, UCHAR);
E_CONFIG_VAL(D, T, desk_flip_animate_mode, INT);
+ E_CONFIG_VAL(D, T, desk_flip_animate_type, STR);
E_CONFIG_VAL(D, T, desk_flip_animate_interpolation, INT);
- E_CONFIG_VAL(D, T, desk_flip_animate_time, DOUBLE);
E_CONFIG_VAL(D, T, wallpaper_import_last_dev, STR);
E_CONFIG_VAL(D, T, wallpaper_import_last_path, STR);
e_config->pointer_warp_speed = e_config->winlist_warp_speed;
e_config->winlist_warp_speed = 0;
}
+ CONFIG_VERSION_CHECK(12)
+ {
+ CONFIG_VERSION_UPDATE_INFO(12);
+ switch (e_config->desk_flip_animate_mode)
+ {
+ case 1: //pane
+ e_config->desk_flip_animate_type = eina_stringshare_add("auto/pane");
+ break;
+ case 2: //zoom, now known as diagonal
+ e_config->desk_flip_animate_type = eina_stringshare_add("auto/diagonal");
+ break;
+ default:
+ break;
+ }
+ }
}
if (!e_config->remember_internal_fm_windows)
e_config->remember_internal_fm_windows = !!(e_config->remember_internal_windows & E_REMEMBER_INTERNAL_FM_WINS);
e_config_xkb_layout_free(ecf->xkb.current_layout);
e_config_xkb_layout_free(ecf->xkb.sel_layout);
e_config_xkb_layout_free(ecf->xkb.lock_layout);
+ eina_stringshare_del(ecf->desk_flip_animate_type);
if (ecf->transition_start) eina_stringshare_del(ecf->transition_start);
if (ecf->transition_desk) eina_stringshare_del(ecf->transition_desk);
if (ecf->transition_change) eina_stringshare_del(ecf->transition_change);
/* increment this whenever a new set of config values are added but the users
* config doesn't need to be wiped - simply new values need to be put in
*/
-#define E_CONFIG_FILE_GENERATION 11
+#define E_CONFIG_FILE_GENERATION 12
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH * 1000000) + E_CONFIG_FILE_GENERATION)
#define E_CONFIG_BINDINGS_VERSION 0 // DO NOT INCREMENT UNLESS YOU WANT TO WIPE ALL BINDINGS!!!!!
const char *icon_theme; // GUI
unsigned char icon_theme_overrides; // GUI
+ /* modes:
+ * 1-"pane") horizontal or vertical movement to/from next/previous "screen"
+ * 2-"zoom") 45degree diagonal movement based on border position
+ */
int desk_flip_animate_mode; // GUI
+ /* types based on theme */
+ Eina_Stringshare *desk_flip_animate_type; // GUI
int desk_flip_animate_interpolation; // GUI
- double desk_flip_animate_time; // GUI
const char *wallpaper_import_last_dev; // INTERNAL
const char *wallpaper_import_last_path; // INTERNAL
co->info_cb = _e_configure_desk_flip_animate_mode_info_cb;
OPT_ICON("preferences-desktop");
//OPT_ADD(INT, desk_flip_animate_interpolation, _("vdesk"), _("animate"), _("flip")); //NOT USED?
- OPT_ADD(DOUBLE, desk_flip_animate_time, _("Desk flip animation length"), _("vdesk"), _("animate"), _("flip"), _("speed"));
- OPT_MINMAX_STEP_FMT(0, 5, 0.05, "%1.2f seconds");
OPT_ADD(STR, theme_default_border_style, _("Default window border style"), _("border"), _("theme"));
co->info_cb = _e_configure_border_style_info_cb;
static void _e_desk_event_desk_after_show_free(void *data, void *ev);
static void _e_desk_event_desk_deskshow_free(void *data, void *ev);
static void _e_desk_event_desk_name_change_free(void *data, void *ev);
-static void _e_desk_show_begin(E_Desk *desk, int mode, int x, int dy);
-static void _e_desk_show_end(E_Desk *desk);
-static Eina_Bool _e_desk_show_animator(void *data);
-static void _e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy);
-static void _e_desk_hide_end(E_Desk *desk);
-static Eina_Bool _e_desk_hide_animator(void *data);
+static void _e_desk_show_begin(E_Desk *desk, int dx, int dy);
+static void _e_desk_hide_begin(E_Desk *desk, int dx, int dy);
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
static void _e_desk_event_desk_window_profile_change_free(void *data, void *ev);
static void _e_desk_window_profile_change_protocol_set(void);
EAPI void
e_desk_show(E_Desk *desk)
{
- E_Border_List *bl;
- E_Border *bd;
E_Event_Desk_Show *ev;
E_Event_Desk_Before_Show *eev;
E_Event_Desk_After_Show *eeev;
dx = desk->x - desk2->x;
dy = desk->y - desk2->y;
}
- if (e_config->desk_flip_animate_mode > 0)
- _e_desk_hide_begin(desk2, e_config->desk_flip_animate_mode,
- dx, dy);
+ _e_desk_hide_begin(desk2, dx, dy);
break;
}
}
desk->zone->desk_y_current = desk->y;
desk->visible = 1;
- msg = alloca(sizeof(Edje_Message_Float_Set) + (4 * sizeof(double)));
- msg->count = 5;
- msg->val[0] = e_config->desk_flip_animate_time;
- msg->val[1] = (double)desk->x;
- msg->val[2] = (double)desk->zone->desk_x_count;
- msg->val[3] = (double)desk->y;
- msg->val[4] = (double)desk->zone->desk_y_count;
- edje_object_message_send(desk->zone->bg_object, EDJE_MESSAGE_FLOAT_SET, 0, msg);
+ msg = alloca(sizeof(Edje_Message_Int_Set) + (3 * sizeof(int)));
+ msg->count = 4;
+ msg->val[0] = desk->x;
+ msg->val[1] = desk->zone->desk_x_count;
+ msg->val[2] = desk->y;
+ msg->val[3] = desk->zone->desk_y_count;
+ edje_object_message_send(desk->zone->bg_object, EDJE_MESSAGE_INT_SET, 0, msg);
if (desk->zone->bg_object) was_zone = 1;
- if (e_config->desk_flip_animate_mode == 0)
- {
- bl = e_container_border_list_first(desk->zone->container);
- while ((bd = e_container_border_list_next(bl)))
- {
- if ((!bd->hidden) && (bd->desk->zone == desk->zone) && (!bd->iconic))
- {
- if ((bd->desk == desk) || (bd->sticky))
- e_border_show(bd);
- else if (bd->moving)
- e_border_desk_set(bd, desk);
- else
- e_border_hide(bd, 2);
- }
- }
- e_container_border_list_free(bl);
- }
-
- if (e_config->desk_flip_animate_mode > 0)
- _e_desk_show_begin(desk, e_config->desk_flip_animate_mode, dx, dy);
- else
+ _e_desk_show_begin(desk, dx, dy);
+ if (!e_config->desk_flip_animate_type)
{
if (e_config->focus_last_focused_per_desktop)
e_desk_last_focused_focus(desk);
static void
_e_desk_free(E_Desk *desk)
{
- if (desk->name) eina_stringshare_del(desk->name);
+ eina_stringshare_del(desk->name);
desk->name = NULL;
- if (desk->animator) ecore_animator_del(desk->animator);
- desk->animator = NULL;
free(desk);
}
}
#endif
-static void
-_e_desk_show_begin(E_Desk *desk, int mode, int dx, int dy)
-{
- E_Border_List *bl;
- E_Border *bd;
- double t;
- if (dx < 0) dx = -1;
- if (dx > 0) dx = 1;
- if (dy < 0) dy = -1;
- if (dy > 0) dy = 1;
-
- t = ecore_loop_time_get();
- bl = e_container_border_list_first(desk->zone->container);
- while ((bd = e_container_border_list_next(bl)))
+static Eina_Bool
+_e_desk_transition_setup(E_Border *bd, int dx, int dy, int state)
+{
+ e_comp_win_effect_set(bd->cw, e_config->desk_flip_animate_type ?: "none");
+ if (e_config->desk_flip_animate_type)
{
- if ((bd->desk->zone == desk->zone) && (!bd->iconic))
- {
- if (bd->moving)
- {
- bd->fx.start.t = t;
- bd->fx.start.x = 0;
- bd->fx.start.y = 0;
- e_border_desk_set(bd, desk);
- e_border_show(bd);
- }
- else if ((bd->desk == desk) && (!bd->sticky))
- {
- e_border_tmp_input_hidden_push(bd);
- bd->fx.start.t = t;
- if (mode == 1)
- {
- bd->fx.start.x = bd->zone->w * (dx * 1.5);
- bd->fx.start.y = bd->zone->h * (dy * 1.5);
- }
- else if (mode == 2)
- {
- int mx, my, bx, by;
- double fx, fy, ang, rad, len, lmax;
-
- mx = bd->zone->x + (bd->zone->w / 2);
- my = bd->zone->y + (bd->zone->h / 2);
-
- bx = bd->x + (bd->w / 2) - mx;
- by = bd->y + (bd->h / 2) - my;
- if (bx == 0) bx = 1;
- if (by == 0) by = 1;
- fx = (double)bx / (double)(bd->zone->w / 2);
- fy = (double)by / (double)(bd->zone->h / 2);
- ang = atan(fy / fx);
- if (fx < 0.0)
- ang = M_PI + ang;
- len = sqrt((bx * bx) + (by * by));
- lmax = sqrt(((bd->zone->w / 2) * (bd->zone->w / 2)) +
- ((bd->zone->h / 2) * (bd->zone->h / 2)));
- rad = sqrt((bd->w * bd->w) + (bd->h * bd->h)) / 2.0;
- bx = cos(ang) * (lmax - len + rad);
- by = sin(ang) * (lmax - len + rad);
- bd->fx.start.x = bx;
- bd->fx.start.y = by;
- }
- if (bd->fx.start.x < 0)
- bd->fx.start.x -= bd->zone->x;
- else
- bd->fx.start.x += bd->zone->container->w - (bd->zone->x + bd->zone->w);
- if (bd->fx.start.y < 0)
- bd->fx.start.y -= bd->zone->y;
- else
- bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h);
- e_border_fx_offset(bd, bd->fx.start.x, bd->fx.start.y);
- e_border_comp_hidden_set(bd, EINA_TRUE);
- }
- }
+ /* set geoms */
+ e_comp_win_effect_params_set(bd->cw, 1, (int[]){bd->x, bd->y, bd->w, bd->h, bd->zone->w, bd->zone->h, dx, dy}, 8);
+ e_comp_win_effect_params_set(bd->cw, 0, (int[]){state}, 1);
}
- e_container_border_list_free(bl);
- if (desk->animator) ecore_animator_del(desk->animator);
- desk->animator = ecore_animator_add(_e_desk_show_animator, desk);
- desk->animating = EINA_TRUE;
+
+ return !!e_config->desk_flip_animate_type;
}
static void
-_e_desk_show_end(E_Desk *desk)
+_e_desk_show_end_serious(E_Desk *desk)
{
E_Event_Desk_After_Show *ev;
- E_Border_List *bl;
- E_Border *bd;
-
- bl = e_container_border_list_first(desk->zone->container);
- while ((bd = e_container_border_list_next(bl)))
- {
- if ((bd->desk->zone == desk->zone) && (!bd->iconic))
- {
- if (bd->moving)
- e_border_fx_offset(bd, 0, 0);
- else if ((bd->desk == desk) && (!bd->sticky))
- {
- e_border_fx_offset(bd, 0, 0);
- e_border_comp_hidden_set(bd, EINA_FALSE);
-
- if (!bd->visible)
- e_border_show(bd);
- }
- e_border_tmp_input_hidden_pop(bd);
- }
- }
if ((e_config->focus_policy == E_FOCUS_MOUSE) ||
(e_config->focus_policy == E_FOCUS_SLOPPY))
e_desk_last_focused_focus(desk);
}
- e_container_border_list_free(bl);
ecore_x_window_shadow_tree_flush();
ev = E_NEW(E_Event_Desk_After_Show, 1);
- ev->desk = e_desk_current_get(desk->zone);
+ ev->desk = desk;
e_object_ref(E_OBJECT(ev->desk));
ecore_event_add(E_EVENT_DESK_AFTER_SHOW, ev,
_e_desk_event_desk_after_show_free, NULL);
}
-static Eina_Bool
-_e_desk_show_animator(void *data)
+static void
+_e_desk_show_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
{
- E_Desk *desk;
- E_Border_List *bl;
- E_Border *bd;
- double t, dt, spd;
+ E_Border *bd = data;
- desk = data;
+ bd->desk->animate_count--;
+ e_border_comp_hidden_set(bd, EINA_FALSE);
+ e_border_tmp_input_hidden_pop(bd);
+ if (bd->desk != e_desk_current_get(bd->zone)) return;
+ if (!bd->visible) e_border_show(bd);
+ if (bd->desk->animate_count) return;
- if (!desk->animating)
- {
- _e_desk_show_end(desk);
- desk->animator = NULL;
- return ECORE_CALLBACK_CANCEL;
- }
+ _e_desk_show_end_serious(bd->desk);
+}
- t = ecore_loop_time_get();
- dt = -1.0;
- spd = e_config->desk_flip_animate_time;
- bl = e_container_border_list_first(desk->zone->container);
- while ((bd = e_container_border_list_next(bl)))
- {
- if ((bd->desk->zone == desk->zone) && (!bd->iconic))
- {
- if (bd->moving)
- {
- }
- else if ((bd->desk == desk) && (!bd->sticky))
- {
- if (!bd->visible)
- e_border_show(bd);
-
- dt = (t - bd->fx.start.t) / spd;
- if (dt > 1.0) dt = 1.0;
- dt = 1.0 - dt;
- dt *= dt; /* decelerate - could be a better hack */
- e_border_fx_offset(bd,
- ((double)bd->fx.start.x * dt),
- ((double)bd->fx.start.y * dt));
- }
- }
- }
- e_container_border_list_free(bl);
- if (dt <= 0.0)
- desk->animating = EINA_FALSE;
+static void
+_e_desk_hide_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
+{
+ E_Border *bd = data;
- return ECORE_CALLBACK_RENEW;
+ bd->desk->animate_count--;
+ e_border_comp_hidden_set(bd, EINA_FALSE);
+ e_border_tmp_input_hidden_pop(bd);
+ e_border_hide(bd, 1);
+ if (bd->desk->animate_count) return;
+ ecore_x_window_shadow_tree_flush();
}
static void
-_e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy)
+_e_desk_show_begin(E_Desk *desk, int dx, int dy)
{
E_Border_List *bl;
E_Border *bd;
- double t;
if (dx < 0) dx = -1;
if (dx > 0) dx = 1;
if (dy < 0) dy = -1;
if (dy > 0) dy = 1;
- t = ecore_loop_time_get();
+ desk->animate_count = 0;
bl = e_container_border_list_first(desk->zone->container);
while ((bd = e_container_border_list_next(bl)))
{
- if ((bd->desk->zone == desk->zone) && (!bd->iconic))
+ if ((bd->desk->zone != desk->zone) || (bd->iconic)) continue;
+ if (bd->moving)
{
- if (bd->moving)
- {
- bd->fx.start.t = t;
- bd->fx.start.x = 0;
- bd->fx.start.y = 0;
- }
- else if ((bd->desk == desk) && (!bd->sticky))
- {
- bd->fx.start.t = t;
- if (mode == 1)
- {
- bd->fx.start.x = bd->zone->w * (-dx * 1.5);
- bd->fx.start.y = bd->zone->h * (-dy * 1.5);
- }
- else if (mode == 2)
- {
- int mx, my, bx, by;
- double fx, fy, ang, rad, len, lmax;
-
- mx = bd->zone->x + (bd->zone->w / 2);
- my = bd->zone->y + (bd->zone->h / 2);
-
- bx = bd->x + (bd->w / 2) - mx;
- by = bd->y + (bd->h / 2) - my;
- if (bx == 0) bx = 1;
- if (by == 0) by = 1;
- fx = (double)bx / (double)(bd->zone->w / 2);
- fy = (double)by / (double)(bd->zone->h / 2);
- ang = atan(fy / fx);
- if (fx < 0.0)
- ang = M_PI + ang;
- len = sqrt((bx * bx) + (by * by));
- lmax = sqrt(((bd->zone->w / 2) * (bd->zone->w / 2)) +
- ((bd->zone->h / 2) * (bd->zone->h / 2)));
- rad = sqrt((bd->w * bd->w) + (bd->h * bd->h)) / 2.0;
- bx = cos(ang) * (lmax - len + rad);
- by = sin(ang) * (lmax - len + rad);
- bd->fx.start.x = bx;
- bd->fx.start.y = by;
- }
- if (bd->fx.start.x < 0)
- bd->fx.start.x -= bd->zone->x;
- else
- bd->fx.start.x += bd->zone->container->w - (bd->zone->x + bd->zone->w);
- if (bd->fx.start.y < 0)
- bd->fx.start.y -= bd->zone->y;
- else
- bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h);
- e_border_fx_offset(bd, 0, 0);
- e_border_comp_hidden_set(bd, EINA_TRUE);
- }
+ e_border_desk_set(bd, desk);
+ e_border_show(bd);
+ continue;
}
- }
- e_container_border_list_free(bl);
- if (desk->animator) ecore_animator_del(desk->animator);
- desk->animator = ecore_animator_add(_e_desk_hide_animator, desk);
- desk->animating = EINA_TRUE;
-}
-
-static void
-_e_desk_hide_end(E_Desk *desk)
-{
- E_Border_List *bl;
- E_Border *bd;
-
- bl = e_container_border_list_first(desk->zone->container);
- while ((bd = e_container_border_list_next(bl)))
- {
- if ((bd->desk->zone == desk->zone) && (!bd->iconic))
+ if ((bd->desk != desk) || (bd->sticky)) continue;
+ if (_e_desk_transition_setup(bd, dx, dy, 1))
{
- if (bd->moving)
- e_border_fx_offset(bd, 0, 0);
- else if ((bd->desk == desk) && (!bd->sticky))
- {
- e_border_fx_offset(bd, 0, 0);
- e_border_comp_hidden_set(bd, EINA_FALSE);
- e_border_hide(bd, 2);
- }
+ e_comp_win_effect_stop(bd->cw, _e_desk_hide_end);
+ e_comp_win_effect_start(bd->cw, _e_desk_show_end, bd);
+ desk->animate_count++;
+ e_border_tmp_input_hidden_push(bd);
+ e_border_comp_hidden_set(bd, EINA_TRUE);
}
+ e_border_show(bd);
}
+ if (!e_config->desk_flip_animate_type)
+ _e_desk_show_end_serious(desk);
e_container_border_list_free(bl);
- ecore_x_window_shadow_tree_flush();
}
-static Eina_Bool
-_e_desk_hide_animator(void *data)
+static void
+_e_desk_hide_begin(E_Desk *desk, int dx, int dy)
{
- E_Desk *desk;
E_Border_List *bl;
E_Border *bd;
- double t, dt, spd;
- desk = data;
-
- if (!desk->animating)
- {
- _e_desk_hide_end(desk);
- desk->animator = NULL;
- return ECORE_CALLBACK_CANCEL;
- }
+ if (dx < 0) dx = -1;
+ if (dx > 0) dx = 1;
+ if (dy < 0) dy = -1;
+ if (dy > 0) dy = 1;
- t = ecore_loop_time_get();
- dt = -1.0;
- spd = e_config->desk_flip_animate_time;
+ desk->animate_count = 0;
bl = e_container_border_list_first(desk->zone->container);
while ((bd = e_container_border_list_next(bl)))
{
- if ((bd->desk->zone == desk->zone) && (!bd->iconic))
+ if ((bd->desk->zone != desk->zone) || (bd->iconic)) continue;
+ if (bd->moving) continue;
+ if ((bd->desk != desk) || (bd->sticky)) continue;
+ if (_e_desk_transition_setup(bd, -dx, -dy, 0))
{
- if (bd->moving)
- {
- }
- else if ((bd->desk == desk) && (!bd->sticky))
- {
- dt = (t - bd->fx.start.t) / spd;
- if (dt > 1.0) dt = 1.0;
- dt *= dt; /* decelerate - could be a better hack */
- e_border_fx_offset(bd,
- ((double)bd->fx.start.x * dt),
- ((double)bd->fx.start.y * dt));
- }
+ e_comp_win_effect_stop(bd->cw, _e_desk_show_end);
+ e_comp_win_effect_start(bd->cw, _e_desk_hide_end, bd);
+ desk->animate_count++;
+ e_border_tmp_input_hidden_push(bd);
+ e_border_comp_hidden_set(bd, EINA_TRUE);
}
+ else
+ e_border_hide(bd, 1);
}
+ if (!e_config->desk_flip_animate_type)
+ ecore_x_window_shadow_tree_flush();
e_container_border_list_free(bl);
-
- if ((dt < 0.0) || (dt >= 1.0))
- desk->animating = EINA_FALSE;
-
- return ECORE_CALLBACK_RENEW;
}
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
Evas_Object *bg_object;
- Ecore_Animator *animator;
- Eina_Bool animating;
+ unsigned int animate_count;
};
struct _E_Event_Desk_Show
break;
case E_BORDER_TYPE:
- px = ((E_Border *)(h->obj))->x + ((E_Border *)(h->obj))->fx.x;
- py = ((E_Border *)(h->obj))->y + ((E_Border *)(h->obj))->fx.y;
+ px = ((E_Border *)(h->obj))->x;
+ py = ((E_Border *)(h->obj))->y;
break;
case E_POPUP_TYPE:
return;
if (e_config->resize_info_follows)
- _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h);
+ _e_move_resize_object_coords_set(bd->x, bd->y, bd->w, bd->h);
else
_e_move_resize_object_coords_set(bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h);
if (!_disp_pop) return;
if (e_config->resize_info_follows)
- _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h);
+ _e_move_resize_object_coords_set(bd->x, bd->y, bd->w, bd->h);
_e_resize_border_extents(bd, &w, &h);
return;
if (e_config->move_info_follows)
- _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h);
+ _e_move_resize_object_coords_set(bd->x, bd->y, bd->w, bd->h);
else
_e_move_resize_object_coords_set(bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h);
if (!_disp_pop) return;
if (e_config->move_info_follows)
- _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h);
+ _e_move_resize_object_coords_set(bd->x, bd->y, bd->w, bd->h);
if (!visible)
{
if (pop->comp_layer == E_COMP_CANVAS_LAYER_LAYOUT)
{
e_layout_pack(e_comp_get(pop)->layout, event_rect);
- e_layout_child_lower_below(event_rect, pop->cw->shobj);
+ e_layout_child_lower_below(event_rect, pop->cw->effect_obj);
}
else
evas_object_layer_set(event_rect, pop->comp_layer - 1);
#endif
int flip_mode;
int flip_interp;
- double flip_speed;
/*- GUI -*/
Evas_Object *preview;
#endif
cfdata->flip_mode = e_config->desk_flip_animate_mode;
cfdata->flip_interp = e_config->desk_flip_animate_interpolation;
- cfdata->flip_speed = e_config->desk_flip_animate_time;
}
static void *
e_config->desk_flip_animate_mode = cfdata->flip_mode;
e_config->desk_flip_animate_interpolation = cfdata->flip_interp;
- e_config->desk_flip_animate_time = cfdata->flip_speed;
e_config->edge_flip_dragging = cfdata->edge_flip_dragging;
e_config->desk_flip_wrap = cfdata->flip_wrap;
return ((e_config->desk_flip_animate_mode != cfdata->flip_mode) ||
(e_config->desk_flip_animate_interpolation != cfdata->flip_interp) ||
- (e_config->desk_flip_animate_time != cfdata->flip_speed) ||
(e_config->edge_flip_dragging != cfdata->edge_flip_dragging) ||
(e_config->desk_flip_wrap != cfdata->flip_wrap)
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
e_widget_list_object_append(o, ob, 1, 0, 0.5);
- ob = e_widget_label_add(evas, _("Animation speed"));
- cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
- e_widget_list_object_append(o, ob, 1, 0, 0.5);
- ob = e_widget_slider_add(evas, 1, 0, _("%1.1f s"), 0, 5, 0.05, 0,
- &(cfdata->flip_speed), NULL, 150);
- e_widget_disabled_set(ob, !cfdata->flip_mode);
- cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
- e_widget_list_object_append(o, ob, 1, 0, 0.5);
e_widget_toolbook_page_append(otb, NULL, _("Flip Animation"), o,
1, 0, 1, 0, 0.5, 0.0);
int mouse_down;
- Ecore_Animator *hide_animator;
double hide_start;
int hide_x, hide_y;
Eina_List *handlers;
Eina_Bool hidden;
+ Eina_Bool animating;
Eina_Bool illume_mode;
};
e_gadcon_locked_set(inst->gcc->gadcon, 0);
- if (inst->hide_animator) ecore_animator_del(inst->hide_animator);
inst->del_fn = NULL;
inst->win = NULL;
edje_object_signal_emit(inst->o_button, "e,state,unfocused", "e");
_conf_dialog(data);
}
-static Eina_Bool
-_hide_animator(void *data)
+static void
+_hide_done(void *data, Evas_Object *obj EINA_UNUSED, const char *s EINA_UNUSED, const char *ss EINA_UNUSED)
{
Instance *inst = data;
- E_Win *ewin = inst->win->ewin;
- double val;
- int finished = 0;
-
- if (!inst->hide_start)
- inst->hide_start = ecore_loop_time_get();
-
- val = (ecore_loop_time_get() - inst->hide_start) / 0.4;
- if (val > 0.99) finished = 1;
-
- val = ecore_animator_pos_map(val, ECORE_POS_MAP_DECELERATE, 0.0, 0.0);
-
- e_border_fx_offset(ewin->border,
- (val * (inst->hide_x * ewin->w)),
- (val * (inst->hide_y * ewin->h)));
- if (finished)
- {
- /* go bac to subject selector */
- evry_selectors_switch(inst->win, -1, 0);
- evry_selectors_switch(inst->win, -1, 0);
-
- inst->hide_animator = NULL;
- e_border_iconify(ewin->border);
- e_border_fx_offset(ewin->border, 0, 0);
- return EINA_FALSE;
- }
+ /* go bac to subject selector */
+ evry_selectors_switch(inst->win, -1, 0);
+ evry_selectors_switch(inst->win, -1, 0);
- return EINA_TRUE;
+ e_border_iconify(inst->win->ewin->border);
+ e_comp_win_effect_set(inst->win->ewin->border->cw, "none");
+ inst->animating = 0;
}
static void
{
Instance *inst = win->data;
- inst->hide_start = 0;
- inst->hide_animator = ecore_animator_add(_hide_animator, inst);
- inst->hidden = EINA_TRUE;
+ e_comp_win_effect_set(inst->win->ewin->border->cw, "pane");
+ /* set geoms */
+ e_comp_win_effect_params_set(inst->win->ewin->border->cw, 1,
+ (int[]){inst->win->ewin->x, inst->win->ewin->y,
+ inst->win->ewin->w, inst->win->ewin->h,
+ inst->win->ewin->border->zone->w, inst->win->ewin->border->zone->h,
+ inst->hide_x, inst->hide_y}, 8);
+ e_comp_win_effect_params_set(inst->win->ewin->border->cw, 0, (int[]){0}, 1);
+ e_comp_win_effect_start(inst->win->ewin->border->cw, _hide_done, inst);
+ inst->hidden = inst->animating = EINA_TRUE;
}
static Eina_Bool
if ((!inst) || (!inst->win))
return ECORE_CALLBACK_PASS_ON;
- if (inst->hide_animator)
- return ECORE_CALLBACK_PASS_ON;
-
if (inst->win->ewin->border != ev->border)
return ECORE_CALLBACK_PASS_ON;
win = inst->win;
bd = win->ewin->border;
- if (inst->hide_animator)
- {
- ecore_animator_del(inst->hide_animator);
- inst->hide_animator = NULL;
- }
-
if (inst->hidden || !bd->focused)
{
- e_border_fx_offset(bd, 0, 0);
+ if (inst->animating)
+ e_comp_win_effect_stop(bd->cw, NULL);
+ e_comp_win_effect_set(bd->cw, "none");
e_border_uniconify(bd);
e_border_raise(bd);
e_border_focus_set(bd, 1, 1);
edje_object_part_text_set(cover->o_base, "e.text.title", _("LOADING"));
evas_object_move(cover->o_base, win->x, win->y);
evas_object_resize(cover->o_base, win->w, win->h);
- evas_object_layer_set(cover->o_base, 999); //FIXME: COMP
+ evas_object_layer_set(cover->o_base, 999);
return cover;
}
exe->border->x = exe->zone->x;
exe->border->y = exe->zone->y;
exe->border->changes.pos = 1;
- exe->border->changed = 1;
+ BD_CHANGED(exe->border);
}
if (exe->handle)
{
{
bd->y = ny;
bd->changes.pos = 1;
- bd->changed = 1;
+ BD_CHANGED(bd);
e_win_move(iwin->win, iwin->win->x, ny);
}
}
_e_mod_sft_win_create_extra_buttons(swin);
edje_object_size_min_calc(swin->o_base, &mw, &mh);
-
+
+ mh = E_CLAMP(mh, 10, zone->h / 3);
/* set minimum size of this window */
e_win_size_min_set(swin->win, zone->w, mh);
/* show the border */
if (_e_illume_kbd->border)
{
- e_border_fx_offset(_e_illume_kbd->border, 0, 0);
+ e_comp_win_effect_set(_e_illume_kbd->border->cw, "move");
+ /* unuse location */
+ e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 0, (int[]){0}, 1);
if (!_e_illume_kbd->border->visible)
e_border_show(_e_illume_kbd->border);
e_border_raise(_e_illume_kbd->border);
e_mod_kbd_hide();
/* tell the focused border it changed so layout gets udpated */
- if (_prev_focused_border)
+ if (_prev_focused_border && (!e_object_is_del(E_OBJECT(_prev_focused_border))))
{
if (!e_illume_border_is_conformant(_prev_focused_border))
{
_prev_focused_border->changes.size = 1;
- _prev_focused_border->changed = 1;
+ BD_CHANGED(_prev_focused_border);
}
}
{
if (_e_illume_kbd->border)
{
- e_border_fx_offset(_e_illume_kbd->border, 0,
- _e_illume_kbd->border->h);
+ e_comp_win_effect_set(_e_illume_kbd->border->cw, "move");
+ /* set location */
+ e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 1, (int[]){0, _e_illume_kbd->border->h}, 2);
+ /* use location */
+ e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 0, (int[]){1}, 1);
e_border_hide(_e_illume_kbd->border, 2);
}
}
_e_illume_kbd->adjust = ((_e_illume_kbd->adjust_end * v) +
(_e_illume_kbd->adjust_start * (1.0 - v)));
- if (_e_illume_kbd->border)
- e_border_fx_offset(_e_illume_kbd->border, 0,
- (_e_illume_kbd->border->h - _e_illume_kbd->adjust));
+ if ((_e_illume_kbd->border && _e_illume_kbd->border->cw))
+ {
+ e_comp_win_effect_set(_e_illume_kbd->border->cw, "move");
+ /* set location */
+ e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 1,
+ (int[]){0, _e_illume_kbd->border->h - _e_illume_kbd->adjust}, 2);
+ /* use location */
+ e_comp_win_effect_params_set(_e_illume_kbd->border->cw, 0, (int[]){1}, 1);
+ }
if (t == _e_illume_kbd->len)
{
if (!_e_illume_kbd->visible)
{
- e_border_fx_offset(bd, 0, bd->h);
+ E_Comp_Win *cw = bd->cw;
+
+ if (!cw) cw = e_comp_win_find(bd->win);
+ if (cw)
+ {
+ e_comp_win_effect_set(cw, "move");
+ /* set location */
+ e_comp_win_effect_params_set(cw, 1, (int[]){0, bd->h}, 2);
+ /* use location */
+ e_comp_win_effect_params_set(cw, 0, (int[]){1}, 1);
+ }
_e_mod_kbd_layout_send();
}
}
if (!e_illume_border_is_conformant(_prev_focused_border))
{
_prev_focused_border->changes.size = 1;
- _prev_focused_border->changed = 1;
+ BD_CHANGED(_prev_focused_border);
}
}
}
if (!e_illume_border_is_conformant(_focused_border))
{
_focused_border->changes.size = 1;
- _focused_border->changed = 1;
+ BD_CHANGED(_focused_border);
}
}
}
EINA_LIST_FOREACH(qp->borders, l, bd)
{
if (!bd->visible) e_illume_border_show(bd);
- if (qp->vert.dir == 0)
- {
- e_border_fx_offset(bd, 0, ny);
- ny += bd->h;
- }
- else
- {
- ny -= bd->h;
- e_border_fx_offset(bd, 0, ny);
- }
+
+ if (qp->vert.dir) ny -= bd->h;
+ e_comp_win_effect_set(bd->cw, "move");
+ /* set location */
+ e_comp_win_effect_params_set(bd->cw, 1, (int[]){0, ny}, 2);
+ /* use location */
+ e_comp_win_effect_params_set(bd->cw, 0, (int[]){1}, 1);
+ if (qp->vert.dir == 0) ny += bd->h;
}
qp->visible = 1;
_e_mod_quickpanel_clickwin_show(qp);
/* if we are not animating, hide the qp borders */
EINA_LIST_REVERSE_FOREACH(qp->borders, l, bd)
{
- e_border_fx_offset(bd, 0, 0);
+ e_comp_win_effect_set(bd->cw, "move");
+ /* unuse location */
+ e_comp_win_effect_params_set(bd->cw, 0, (int[]){0}, 1);
if (bd->visible) e_illume_border_hide(bd);
}
qp->visible = 0;
{
/* don't adjust borders that are being deleted */
if (e_object_is_del(E_OBJECT(bd))) continue;
- if (bd->fx.y != (qp->vert.adjust + pbh))
- e_border_fx_offset(bd, 0, (qp->vert.adjust + pbh));
+ e_comp_win_effect_set(bd->cw, "move");
+ /* set location */
+ e_comp_win_effect_params_set(bd->cw, 1,
+ (int[]){0, qp->vert.adjust + pbh}, 2);
+ /* use location */
+ e_comp_win_effect_params_set(bd->cw, 0, (int[]){1}, 1);
pbh += bd->h;
if (!qp->visible)
{
- if (bd->fx.y > 0)
+ if (qp->vert.adjust + pbh > 0)
{
if (!bd->visible) e_illume_border_show(bd);
}
}
else
{
- if (bd->fx.y <= 10)
+ if (qp->vert.adjust + pbh <= 10)
{
if (bd->visible) e_illume_border_hide(bd);
}
/* don't adjust borders that are being deleted */
if (e_object_is_del(E_OBJECT(bd))) continue;
pbh -= bd->h;
- if (bd->fx.y != (qp->vert.adjust + pbh))
- e_border_fx_offset(bd, 0, (qp->vert.adjust + pbh));
+ e_comp_win_effect_set(bd->cw, "move");
+ /* set location */
+ e_comp_win_effect_params_set(bd->cw, 1,
+ (int[]){0, qp->vert.adjust + pbh}, 2);
+ /* use location */
+ e_comp_win_effect_params_set(bd->cw, 0, (int[]){1}, 1);
if (!qp->visible)
{
- if (bd->fx.y < 0)
+ if (qp->vert.adjust + pbh < 0)
{
if (!bd->visible) e_illume_border_show(bd);
}
}
else
{
- if (bd->fx.y >= -10)
+ if (qp->vert.adjust + pbh >= -10)
{
if (bd->visible) e_illume_border_hide(bd);
}
bd->x = x;
bd->y = y;
bd->changes.pos = 1;
- bd->changed = 1;
+ BD_CHANGED(bd);
}
static void
bd->client.w = (bd->w - (bd->client_inset.l + bd->client_inset.r));
bd->client.h = (bd->h - (bd->client_inset.t + bd->client_inset.b));
bd->changes.size = 1;
- bd->changed = 1;
+ BD_CHANGED(bd);
}
static void
if (bd->zone != zone) continue;
/* skip special windows */
+ if (e_object_is_del(E_OBJECT(bd))) continue;
if (e_illume_border_is_keyboard(bd)) continue;
if (e_illume_border_is_quickpanel(bd)) continue;
/* signal a changed pos here so layout gets updated */
bd->changes.pos = 1;
- bd->changed = 1;
+ BD_CHANGED(bd);
}
}
/* signal a changed pos here so layout gets updated */
bd->changes.pos = 1;
- bd->changed = 1;
+ BD_CHANGED(bd);
}
}
/* adjust for keyboard visibility because keyboard uses fx_offset */
y = 0;
- if (kbd->border->fx.y <= 0) y = kbd->border->y;
+ if (kbd->border->cw &&
+ (!e_util_strcmp(edje_object_part_state_get(kbd->border->cw->effect_obj, "mover", NULL), "custom")))
+ y = kbd->border->y;
/* look for conformant borders */
EINA_LIST_FOREACH(e_border_client_list(), l, bd)
bd->x = x;
bd->y = y;
bd->changes.pos = 1;
- bd->changed = 1;
+ BD_CHANGED(bd);
}
static void
bd->client.w = (bd->w - (bd->client_inset.l + bd->client_inset.r));
bd->client.h = (bd->h - (bd->client_inset.t + bd->client_inset.b));
bd->changes.size = 1;
- bd->changed = 1;
+ BD_CHANGED(bd);
}
static void
if (bd->zone != zone) continue;
/* skip special windows */
+ if (e_object_is_del(E_OBJECT(bd))) continue;
if (e_illume_border_is_keyboard(bd)) continue;
if (e_illume_border_is_quickpanel(bd)) continue;
/* signal a changed pos here so layout gets updated */
bd->changes.pos = 1;
- bd->changed = 1;
+ BD_CHANGED(bd);
}
}
if (bd->zone != zone) continue;
bd->changes.pos = 1;
- bd->changed = 1;
+ BD_CHANGED(bd);
}
}
/* adjust Y for keyboard visibility because keyboard uses fx_offset */
y = 0;
- if (kbd->border->fx.y <= 0) y = kbd->border->y;
+ if (kbd->border->cw &&
+ (!e_util_strcmp(edje_object_part_state_get(kbd->border->cw->effect_obj, "mover", NULL), "custom")))
+ y = kbd->border->y;
/* look for conformant borders */
EINA_LIST_FOREACH(e_border_client_list(), l, bd)