giant comp rejiggering commit #6:

* border->fx REMOVED, related border api REMOVED

* comp edc has new class of groups: e/comp/effects[/auto]
** these are effects which can be applied to any compositor object through the e_comp_win_effect* api and are written in embryo
*** two types - base and auto - base = manual, for use with animators; auto are "trigger and forget", for use as actual effects

* desk flip transition animations moved to comp effects and FIXED(ish)

* "zoom" effect renamed to "diagonal" for slightly less misleading name since it never did any zooming

* actual "zoom" effect added

* border hierarchy now as follows: cw->effect_obj swallows cw->shobj, cw->shobj swallows cw->bd->bg_object ?: cw->obj, if (cw->bd->bg_object) cw->bd->bg_object swallows cw->obj
** cw->effect_obj now used for all positioning and comp logic
** cw->effect_obj ONLY used for object transformation effects (moving, zooming, fading, etc)
** cw->shobj ONLY for comp visual/non-movement effects (focus effect, unfocus opacity, legacy shadows); this is a candidate for removal/rewrite in E19

* even more comp shape rewrites

* desk flip animation time now controlled by theme since edje doesn't support setting transition time in C; related config value removed

* desk flip transitions (in e_desk.c) rewritten

* various modules (evry/illume2) updated to use comp effects instead of fx offset

* desk flip configuration BROKEN(ish)
This commit is contained in:
Mike Blumenkrantz 2013-02-28 15:20:32 +00:00
parent 505cec1d91
commit 718dfef61d
26 changed files with 730 additions and 532 deletions

View File

@ -1,6 +1,8 @@
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

2
NEWS
View File

@ -33,6 +33,7 @@ Additions:
* 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
@ -127,6 +128,7 @@ Improvements:
* 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.

View File

@ -241,6 +241,315 @@ group { name: "e/comp/screen/overlay/noeffects";
}
}
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;

View File

@ -636,6 +636,7 @@ group { name: "modules/illume-softkey/window";
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;
@ -652,6 +653,7 @@ group { name: "modules/illume-softkey/window";
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;

View File

@ -1171,8 +1171,8 @@ _e_border_client_move_resize_send(E_Border *bd)
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);
}
@ -1366,24 +1366,6 @@ e_border_center_pos_get(E_Border *bd,
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,
@ -6551,15 +6533,15 @@ _e_border_cb_mouse_down_helper(E_Border *bd, int button, Evas_Point *output, E_B
{
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;
}
@ -6584,15 +6566,15 @@ _e_border_cb_mouse_down_helper(E_Border *bd, int button, Evas_Point *output, E_B
{
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;
}
@ -6649,8 +6631,8 @@ _e_border_cb_mouse_up_helper(E_Border *bd, int button, Evas_Point *output, E_Bin
{
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;
@ -6674,8 +6656,8 @@ _e_border_cb_mouse_up_helper(E_Border *bd, int button, Evas_Point *output, E_Bin
{
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;
@ -7000,11 +6982,9 @@ _e_border_post_move_resize_job(void *data)
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)
@ -7015,24 +6995,22 @@ _e_border_post_move_resize_job(void *data)
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)
{
@ -7047,11 +7025,9 @@ _e_border_post_move_resize_job(void *data)
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);
}
@ -8691,11 +8667,9 @@ _e_border_eval(E_Border *bd)
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;
}
@ -8713,8 +8687,8 @@ _e_border_eval(E_Border *bd)
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))
@ -8744,7 +8718,7 @@ _e_border_eval(E_Border *bd)
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);
@ -8923,8 +8897,8 @@ _e_border_eval(E_Border *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;

View File

@ -175,16 +175,6 @@ struct _E_Border
E_Zone *zone;
E_Desk *desk;
struct
{
int x, y;
struct
{
int x, y;
double t;
} start;
} fx;
struct
{
int l, r, t, b;
@ -733,7 +723,6 @@ EAPI void e_border_move_intercept_cb_set(E_Border *bd, E_Border_Move_I
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);

View File

@ -153,7 +153,7 @@ _e_comp_event_source_configure(E_Comp_Win *cw)
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;
@ -166,7 +166,7 @@ _e_comp_child_show(E_Comp_Win *cw)
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);
}
}
}
@ -174,7 +174,7 @@ _e_comp_child_show(E_Comp_Win *cw)
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;
@ -187,7 +187,7 @@ _e_comp_child_hide(E_Comp_Win *cw)
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);
}
}
}
@ -413,7 +413,7 @@ _e_comp_win_ready_timeout_setup(E_Comp_Win *cw)
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
@ -430,13 +430,13 @@ _e_comp_win_restack(E_Comp_Win *cw)
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));
}
@ -450,7 +450,7 @@ _e_comp_win_restack(E_Comp_Win *cw)
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));
}
@ -483,13 +483,13 @@ _e_comp_win_geometry_update(E_Comp_Win *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);
}
}
@ -637,9 +637,9 @@ _e_comp_win_update(E_Comp_Win *cw)
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) &&
@ -844,7 +844,7 @@ _e_comp_win_update(E_Comp_Win *cw)
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)
{
@ -1042,7 +1042,7 @@ _e_comp_cb_nocomp_begin(E_Comp *c)
}
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);
@ -1123,7 +1123,7 @@ _e_comp_cb_nocomp_end(E_Comp *c)
_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)
{
@ -2003,25 +2003,39 @@ _e_comp_win_dummy_add(E_Comp *c, Evas_Object *obj, E_Object *eobj, Eina_Bool nol
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);
@ -2146,6 +2160,8 @@ _e_comp_win_add(E_Comp *c, Ecore_X_Window win, E_Border *bd)
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);
@ -2153,6 +2169,7 @@ _e_comp_win_add(E_Comp *c, Ecore_X_Window win, E_Border *bd)
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);
@ -2179,20 +2196,15 @@ _e_comp_win_add(E_Comp *c, Ecore_X_Window win, E_Border *bd)
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");
}
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)
{
evas_object_data_set(cw->shobj, "menu", cw->menu);
evas_object_name_set(cw->shobj, "cw->shobj::MENU");
evas_object_name_set(cw->effect_obj, "cw->effect_obj::BORDER");
}
else
evas_object_name_set(cw->shobj, "cw->shobj::WINDOW");
{
evas_object_name_set(cw->shobj, "cw->shobj::WINDOW");
evas_object_name_set(cw->effect_obj, "cw->effect_obj::WINDOW");
}
evas_object_name_set(cw->obj, "cw->obj");
@ -2201,13 +2213,13 @@ _e_comp_win_add(E_Comp *c, Ecore_X_Window win, E_Border *bd)
}
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));
@ -2354,16 +2366,9 @@ _e_comp_win_del(E_Comp_Win *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);
@ -2549,6 +2554,7 @@ _e_comp_win_hide(E_Comp_Win *cw)
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)
{
@ -2697,7 +2703,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border)
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;
@ -2714,7 +2720,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border)
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
@ -2724,7 +2730,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int 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);
}
@ -2744,7 +2750,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border)
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);
}
@ -2759,7 +2765,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border)
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);
}
@ -2767,7 +2773,7 @@ _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border)
{
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);
}
@ -3076,7 +3082,7 @@ _e_comp_message(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
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);
}
@ -5140,7 +5146,7 @@ e_comp_top_window_at_xy_get(E_Comp *c, Evas_Coord x, Evas_Coord y, Ecore_X_Windo
{
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);
@ -5286,7 +5292,7 @@ e_comp_canvas_layer_set(Evas_Object *obj, E_Comp_Canvas_Layer comp_layer, E_Laye
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);
}
@ -5405,6 +5411,107 @@ e_comp_block_window_del(void)
}
}
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)
{

View File

@ -126,6 +126,7 @@ struct _E_Comp_Win
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
@ -189,6 +190,9 @@ struct _E_Comp_Win
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
@ -227,6 +231,11 @@ EAPI void e_comp_zone_update(E_Comp_Zone *cz);
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);

View File

@ -625,8 +625,8 @@ _e_config_edd_init(Eina_Bool old)
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);
@ -1206,6 +1206,21 @@ e_config_load(void)
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);
@ -2145,6 +2160,7 @@ _e_config_free(E_Config *ecf)
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);

View File

@ -48,7 +48,7 @@ typedef enum
/* 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!!!!!
@ -265,9 +265,14 @@ struct _E_Config
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

View File

@ -1825,8 +1825,6 @@ e_configure_option_init(void)
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;

View File

@ -11,12 +11,8 @@ static void _e_desk_event_desk_before_show_free(void *data, void *ev);
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);
@ -222,8 +218,6 @@ e_desk_name_update(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;
@ -273,9 +267,7 @@ e_desk_show(E_Desk *desk)
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;
}
}
@ -287,37 +279,17 @@ e_desk_show(E_Desk *desk)
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);
@ -672,10 +644,8 @@ e_desk_window_profile_update(void)
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);
}
@ -740,111 +710,25 @@ _e_desk_event_desk_window_profile_change_free(void *data __UNUSED__, void *event
}
#endif
static void
_e_desk_show_begin(E_Desk *desk, int mode, int dx, int dy)
static Eina_Bool
_e_desk_transition_setup(E_Border *bd, int dx, int dy, int state)
{
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)))
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))
@ -858,212 +742,112 @@ _e_desk_show_end(E_Desk *desk)
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;
}
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;
return ECORE_CALLBACK_RENEW;
_e_desk_show_end_serious(bd->desk);
}
static void
_e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy)
_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;
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_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;
}
if ((bd->desk != desk) || (bd->sticky)) continue;
if (_e_desk_transition_setup(bd, dx, dy, 1))
{
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);
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_desk_hide_begin(E_Desk *desk, int dx, int dy)
{
E_Border_List *bl;
E_Border *bd;
if (dx < 0) dx = -1;
if (dx > 0) dx = 1;
if (dy < 0) dy = -1;
if (dy > 0) dy = 1;
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)
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_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);
ecore_x_window_shadow_tree_flush();
}
static Eina_Bool
_e_desk_hide_animator(void *data)
{
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;
}
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))
{
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_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)

View File

@ -34,8 +34,7 @@ struct _E_Desk
Evas_Object *bg_object;
Ecore_Animator *animator;
Eina_Bool animating;
unsigned int animate_count;
};
struct _E_Event_Desk_Show

View File

@ -608,8 +608,8 @@ _e_drag_coords_update(const E_Drop_Handler *h, int *dx, int *dy)
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:

View File

@ -65,7 +65,7 @@ _e_resize_begin(void *data __UNUSED__, void *border)
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);
@ -120,7 +120,7 @@ _e_resize_update(void *data __UNUSED__, void *border)
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);
@ -176,7 +176,7 @@ _e_move_begin(void *data __UNUSED__, void *border)
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);
@ -224,7 +224,7 @@ _e_move_update(void *data __UNUSED__, void *border)
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)
{

View File

@ -66,7 +66,7 @@ _e_popup_autoclose_setup(E_Popup *pop)
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);

View File

@ -22,7 +22,6 @@ struct _E_Config_Dialog_Data
#endif
int flip_mode;
int flip_interp;
double flip_speed;
/*- GUI -*/
Evas_Object *preview;
@ -68,7 +67,6 @@ _fill_data(E_Config_Dialog_Data *cfdata)
#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 *
@ -106,7 +104,6 @@ _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
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;
@ -143,7 +140,6 @@ _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfda
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)
@ -220,14 +216,6 @@ _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dial
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);

View File

@ -17,13 +17,13 @@ struct _Instance
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;
};
@ -217,7 +217,6 @@ _del_func(void *data, void *obj __UNUSED__)
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");
@ -229,39 +228,18 @@ _cb_menu_configure(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
_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();
/* go bac to subject selector */
evry_selectors_switch(inst->win, -1, 0);
evry_selectors_switch(inst->win, -1, 0);
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;
}
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
@ -269,9 +247,16 @@ _evry_hide_func(Evry_Window *win, int finished __UNUSED__)
{
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
@ -288,9 +273,6 @@ _cb_focus_out(void *data, int type __UNUSED__, void *event)
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;
@ -459,15 +441,11 @@ _button_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED_
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);

View File

@ -24,7 +24,7 @@ e_busycover_new(E_Win *win)
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;
}

View File

@ -594,7 +594,7 @@ _il_home_cb_border_add(void *data __UNUSED__, int type __UNUSED__, void *event)
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)
{

View File

@ -417,7 +417,7 @@ _e_mod_ind_win_cb_mouse_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj
{
bd->y = ny;
bd->changes.pos = 1;
bd->changed = 1;
BD_CHANGED(bd);
e_win_move(iwin->win, iwin->win->x, ny);
}
}

View File

@ -87,7 +87,8 @@ e_mod_sft_win_new(E_Zone *zone)
_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);

View File

@ -154,7 +154,9 @@ e_mod_kbd_show(void)
/* 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);
@ -322,12 +324,12 @@ _e_mod_kbd_cb_border_focus_out(void *data __UNUSED__, int type __UNUSED__, void
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);
}
}
@ -461,8 +463,11 @@ _e_mod_kbd_hide(void)
{
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);
}
}
@ -511,9 +516,15 @@ _e_mod_kbd_cb_animate(void *data __UNUSED__)
_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)
{
@ -563,7 +574,17 @@ _e_mod_kbd_border_adopt(E_Border *bd)
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();
}
}
@ -656,7 +677,7 @@ _e_mod_kbd_changes_send(void)
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);
}
}
}
@ -669,7 +690,7 @@ _e_mod_kbd_changes_send(void)
if (!e_illume_border_is_conformant(_focused_border))
{
_focused_border->changes.size = 1;
_focused_border->changed = 1;
BD_CHANGED(_focused_border);
}
}
}

View File

@ -135,16 +135,14 @@ e_mod_quickpanel_show(E_Illume_Quickpanel *qp)
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);
@ -458,7 +456,9 @@ _e_mod_quickpanel_hide(E_Illume_Quickpanel *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;
@ -543,20 +543,24 @@ _e_mod_quickpanel_animate_down(E_Illume_Quickpanel *qp)
{
/* 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);
}
@ -578,19 +582,23 @@ _e_mod_quickpanel_animate_up(E_Illume_Quickpanel *qp)
/* 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);
}

View File

@ -107,7 +107,7 @@ _policy_border_move(E_Border *bd, int x, int y)
bd->x = x;
bd->y = y;
bd->changes.pos = 1;
bd->changed = 1;
BD_CHANGED(bd);
}
static void
@ -120,7 +120,7 @@ _policy_border_resize(E_Border *bd, int w, int h)
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
@ -305,12 +305,13 @@ _policy_zone_layout_update(E_Zone *zone)
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);
}
}
@ -1513,7 +1514,7 @@ _policy_zone_move_resize(E_Zone *zone)
/* signal a changed pos here so layout gets updated */
bd->changes.pos = 1;
bd->changed = 1;
BD_CHANGED(bd);
}
}
@ -1882,7 +1883,9 @@ _policy_property_change(Ecore_X_Event_Window_Property *event)
/* 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)

View File

@ -89,7 +89,7 @@ _policy_border_move(E_Border *bd, int x, int y)
bd->x = x;
bd->y = y;
bd->changes.pos = 1;
bd->changed = 1;
BD_CHANGED(bd);
}
static void
@ -102,7 +102,7 @@ _policy_border_resize(E_Border *bd, int w, int h)
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
@ -259,12 +259,13 @@ _policy_zone_layout_update(E_Zone *zone)
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);
}
}
@ -1165,7 +1166,7 @@ _policy_zone_move_resize(E_Zone *zone)
if (bd->zone != zone) continue;
bd->changes.pos = 1;
bd->changed = 1;
BD_CHANGED(bd);
}
}
@ -1497,7 +1498,9 @@ _policy_property_change(Ecore_X_Event_Window_Property *event)
/* 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)