forked from enlightenment/enlightenment
Window/Action/Push in direction is now able to do 2d movements.
Allow one to send window to corners. up-left, up-right, down-left and down-right are the new possible values. HINT: for those that don't know, the "Push" has the nice behavior to do the push in the given direction but stops in the first window/obstacle in that direction, thus avoiding overlapping windows. SVN revision: 49433
This commit is contained in:
parent
36c9bdebe1
commit
d08037a625
|
@ -943,35 +943,62 @@ ACT_FN_GO(window_push)
|
|||
{
|
||||
E_Border *bd, *cur;
|
||||
E_Border_List *bd_list;
|
||||
E_Direction dir;
|
||||
int hdir, vdir;
|
||||
int x, y, zx, zy, zw, zh;
|
||||
|
||||
if (strcmp(params, "left") == 0)
|
||||
dir = E_DIRECTION_LEFT;
|
||||
{
|
||||
hdir = -1;
|
||||
vdir = 0;
|
||||
}
|
||||
else if (strcmp(params, "right") == 0)
|
||||
dir = E_DIRECTION_RIGHT;
|
||||
{
|
||||
hdir = +1;
|
||||
vdir = 0;
|
||||
}
|
||||
else if (strcmp(params, "up") == 0)
|
||||
dir = E_DIRECTION_UP;
|
||||
{
|
||||
hdir = 0;
|
||||
vdir = -1;
|
||||
}
|
||||
else if (strcmp(params, "down") == 0)
|
||||
dir = E_DIRECTION_DOWN;
|
||||
{
|
||||
hdir = 0;
|
||||
vdir = +1;
|
||||
}
|
||||
else if (strcmp(params, "up-left") == 0)
|
||||
{
|
||||
hdir = -1;
|
||||
vdir = -1;
|
||||
}
|
||||
else if (strcmp(params, "up-right") == 0)
|
||||
{
|
||||
hdir = +1;
|
||||
vdir = -1;
|
||||
}
|
||||
else if (strcmp(params, "down-left") == 0)
|
||||
{
|
||||
hdir = -1;
|
||||
vdir = +1;
|
||||
}
|
||||
else if (strcmp(params, "down-right") == 0)
|
||||
{
|
||||
hdir = +1;
|
||||
vdir = +1;
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
bd = (E_Border *)obj;
|
||||
e_zone_useful_geometry_get(bd->zone, &zx, &zy, &zw, &zh);
|
||||
|
||||
/* Target x and y. */
|
||||
x = bd->x;
|
||||
y = bd->y;
|
||||
if (hdir < 0) x = zx;
|
||||
else if (hdir > 0) x = zx + zw - bd->w;
|
||||
else x = bd->x;
|
||||
|
||||
if (dir == E_DIRECTION_LEFT)
|
||||
x = zx;
|
||||
else if (dir == E_DIRECTION_RIGHT)
|
||||
x = zx + zw - bd->w;
|
||||
else if (dir == E_DIRECTION_UP)
|
||||
y = zy;
|
||||
else /* dir == E_DIRECTION_DOWN */
|
||||
y = zy + zh - bd->h;
|
||||
if (vdir < 0) y = zy;
|
||||
else if (vdir > 0) y = zy + zh - bd->h;
|
||||
else y = bd->y;
|
||||
|
||||
bd_list = e_container_border_list_first(bd->zone->container);
|
||||
cur = e_container_border_list_next(bd_list);
|
||||
|
@ -980,22 +1007,23 @@ ACT_FN_GO(window_push)
|
|||
{
|
||||
if ((bd->desk == cur->desk) && (bd != cur) && (!cur->iconic))
|
||||
{
|
||||
if ((dir == E_DIRECTION_LEFT)
|
||||
&& (cur->x + cur->w < bd->x)
|
||||
&& (E_SPANS_COMMON(bd->y, bd->h, cur->y, cur->h)))
|
||||
x = MAX(x, cur->x + cur->w);
|
||||
else if ((dir == E_DIRECTION_RIGHT)
|
||||
&& (cur->x > bd->x + bd->w)
|
||||
&& (E_SPANS_COMMON(bd->y, bd->h, cur->y, cur->h)))
|
||||
x = MIN(x, zx + cur->x - bd->w);
|
||||
else if ((dir == E_DIRECTION_UP)
|
||||
&& (cur->y + cur->h < bd->y)
|
||||
&& (E_SPANS_COMMON(bd->x, bd->w, cur->x, cur->w)))
|
||||
y = MAX(y, cur->y + cur->h);
|
||||
else if ((dir == E_DIRECTION_DOWN)
|
||||
&& (cur->y > bd->y + bd->h)
|
||||
&& (E_SPANS_COMMON(bd->x, bd->w, cur->x, cur->w)))
|
||||
y = MIN(y, zy + cur->y - bd->h);
|
||||
if ((hdir < 0)
|
||||
&& (cur->x + cur->w < bd->x)
|
||||
&& (E_SPANS_COMMON(bd->y, bd->h, cur->y, cur->h)))
|
||||
x = MAX(x, cur->x + cur->w);
|
||||
else if ((hdir > 0)
|
||||
&& (cur->x > bd->x + bd->w)
|
||||
&& (E_SPANS_COMMON(bd->y, bd->h, cur->y, cur->h)))
|
||||
x = MIN(x, zx + cur->x - bd->w);
|
||||
|
||||
if ((vdir < 0)
|
||||
&& (cur->y + cur->h < bd->y)
|
||||
&& (E_SPANS_COMMON(bd->x, bd->w, cur->x, cur->w)))
|
||||
y = MAX(y, cur->y + cur->h);
|
||||
else if ((vdir > 0)
|
||||
&& (cur->y > bd->y + bd->h)
|
||||
&& (E_SPANS_COMMON(bd->x, bd->w, cur->x, cur->w)))
|
||||
y = MIN(y, zy + cur->y - bd->h);
|
||||
}
|
||||
cur = e_container_border_list_next(bd_list);
|
||||
}
|
||||
|
@ -2826,7 +2854,7 @@ e_actions_init(void)
|
|||
ACT_GO(window_push);
|
||||
e_action_predef_name_set(_("Window : Actions"), "Push in Direction...",
|
||||
"window_push", NULL,
|
||||
"syntax: direction, example: up, down, left, right", 1);
|
||||
"syntax: direction, example: up, down, left, right, up-left, up-right, bottom-left, bottom-right", 1);
|
||||
|
||||
/* window_drag_icon */
|
||||
ACT_GO(window_drag_icon);
|
||||
|
|
Loading…
Reference in New Issue