forked from enlightenment/enlightenment
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:
parent
505cec1d91
commit
718dfef61d
|
@ -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
2
NEWS
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
219
src/bin/e_comp.c
219
src/bin/e_comp.c
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
390
src/bin/e_desk.c
390
src/bin/e_desk.c
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue