e: move/resize maximized windows but still keeping them maximized

SVN revision: 58673
This commit is contained in:
Boris Faure 2011-04-14 21:19:25 +00:00
parent 72c84ef2f2
commit f9f62a5158
1 changed files with 76 additions and 40 deletions

View File

@ -1122,6 +1122,30 @@ _e_border_move_internal(E_Border *bd,
return;
}
if (bd->maximized)
{
if ((bd->maximized & E_MAXIMIZE_DIRECTION) != E_MAXIMIZE_BOTH)
{
if (e_config->allow_manip)
bd->maximized = 0;
if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
{
x = bd->x;
}
else
if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
{
y = bd->y;
}
}
else
if (e_config->allow_manip)
bd->maximized = 0;
else
return;
}
if (without_border)
{
x -= bd->client_inset.l;
@ -1129,7 +1153,6 @@ _e_border_move_internal(E_Border *bd,
}
if ((x == bd->x) && (y == bd->y)) return;
bd->maximized = 0;
bd->pre_res_change.valid = 0;
bd->x = x;
bd->y = y;
@ -1173,10 +1196,6 @@ e_border_move(E_Border *bd,
if (bd->fullscreen)
return;
/* allow border to unshade when it was maximized _and_ shaded */
if ((bd->maximized) && (!e_config->allow_manip) && (!bd->shading))
return;
_e_border_move_internal(bd, x, y, 0);
}
@ -1204,10 +1223,6 @@ e_border_move_without_border(E_Border *bd,
if (bd->fullscreen)
return;
/* allow border to unshade when it was maximized _and_ shaded */
if ((bd->maximized) && (!e_config->allow_manip) && (!bd->shading))
return;
_e_border_move_internal(bd, x, y, 1);
}
@ -1277,6 +1292,32 @@ _e_border_move_resize_internal(E_Border *bd,
return;
}
if (bd->maximized)
{
if ((bd->maximized & E_MAXIMIZE_DIRECTION) != E_MAXIMIZE_BOTH)
{
if (e_config->allow_manip)
bd->maximized = 0;
if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
{
x = bd->x;
w = bd->w;
}
else
if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
{
y = bd->y;
h = bd->h;
}
}
else
if (e_config->allow_manip)
bd->maximized = 0;
else
return;
}
if (without_border)
{
x -= bd->client_inset.l;
@ -1289,7 +1330,6 @@ _e_border_move_resize_internal(E_Border *bd,
(w == bd->w) && (h == bd->h))
return;
bd->maximized = 0;
bd->pre_res_change.valid = 0;
if (move)
{
@ -1379,8 +1419,7 @@ e_border_move_resize(E_Border *bd,
int w,
int h)
{
if ((bd->fullscreen) ||
((bd->maximized) && (!e_config->allow_manip) && (!bd->shading)))
if (bd->fullscreen)
return;
_e_border_move_resize_internal(bd, x, y, w, h, 0, 1);
@ -1408,8 +1447,7 @@ e_border_move_resize_without_border(E_Border *bd,
int w,
int h)
{
if ((bd->fullscreen) ||
((bd->maximized) && (!e_config->allow_manip) && (!bd->shading)))
if (bd->fullscreen)
return;
_e_border_move_resize_internal(bd, x, y, w, h, 1, 1);
@ -1433,8 +1471,7 @@ e_border_resize(E_Border *bd,
int w,
int h)
{
if ((bd->fullscreen) ||
((bd->maximized) && (!e_config->allow_manip) && (!bd->shading)))
if (bd->fullscreen)
return;
_e_border_move_resize_internal(bd, 0, 0, w, h, 0, 0);
@ -1461,8 +1498,7 @@ e_border_resize_without_border(E_Border *bd,
int w,
int h)
{
if ((bd->fullscreen) ||
((bd->maximized) && (!e_config->allow_manip) && (!bd->shading)))
if (bd->fullscreen)
return;
_e_border_move_resize_internal(bd, 0, 0, w, h, 1, 0);
@ -2371,6 +2407,7 @@ e_border_maximize(E_Border *bd,
e_border_move_resize(bd, x1, bd->y, w, bd->h);
break;
}
/* Remove previous type */
bd->maximized &= ~E_MAXIMIZE_TYPE;
/* Add new maximization. It must be added, so that VERTICAL + HORIZONTAL == BOTH */
@ -2464,15 +2501,18 @@ e_border_unmaximize(E_Border *bd,
e_border_resize_limit(bd, &w, &h);
_e_border_move_resize_internal(bd, x, y, w, h, 0, 1);
if (!(bd->maximized & E_MAXIMIZE_DIRECTION))
{
bd->maximized = E_MAXIMIZE_NONE;
_e_border_move_resize_internal(bd, x, y, w, h, 0, 1);
e_hints_window_size_unset(bd);
edje_object_signal_emit(bd->bg_object, "e,action,unmaximize", "e");
}
else
e_hints_window_size_set(bd);
{
_e_border_move_resize_internal(bd, x, y, w, h, 0, 1);
e_hints_window_size_set(bd);
}
}
e_hints_window_maximized_set(bd, bd->maximized & E_MAXIMIZE_HORIZONTAL,
bd->maximized & E_MAXIMIZE_VERTICAL);
@ -5304,7 +5344,6 @@ _e_border_cb_window_move_resize_request(void *data __UNUSED__,
if (!bd) return ECORE_CALLBACK_PASS_ON;
if ((bd->shaded) || (bd->shading) ||
((bd->maximized) && (!e_config->allow_manip)) ||
(bd->fullscreen) || (bd->moving) ||
(bd->resize_mode != RESIZE_NONE))
return ECORE_CALLBACK_PASS_ON;
@ -6927,14 +6966,17 @@ _e_border_eval0(E_Border *bd)
if (bd->maximized != E_MAXIMIZE_NONE)
{
E_Maximize maximized = bd->maximized;
int x1, y1, x2, y2;
int w, h, pw, ph;
int zx, zy, zw, zh;
E_Maximize maximized = bd->maximized;
/* to force possible resizes */
bd->maximized = E_MAXIMIZE_NONE;
zx = zy = zw = zh = 0;
switch (bd->maximized & E_MAXIMIZE_TYPE)
switch (maximized & E_MAXIMIZE_TYPE)
{
case E_MAXIMIZE_FULLSCREEN:
w = bd->zone->w;
@ -6966,12 +7008,12 @@ _e_border_eval0(E_Border *bd)
/* center y-direction */
y1 = bd->zone->y + (bd->zone->h - h) / 2;
if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
if ((maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
_e_border_move_resize_internal(bd, x1, y1, w, h, 0, 1);
else if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
else if ((maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
_e_border_move_resize_internal(bd, bd->x, y1, bd->w, h, 0, 1);
else if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
else if ((maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
_e_border_move_resize_internal(bd, x1, bd->y, w, bd->h, 0, 1);
break;
@ -7004,11 +7046,11 @@ _e_border_eval0(E_Border *bd)
else // window normal position
y1 = bd->y;
if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
if ((maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
_e_border_move_resize_internal(bd, zx, zy, zw, zh, 0, 1);
else if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
else if ((maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
_e_border_move_resize_internal(bd, x1, zy, w, zh, 0, 1);
else if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
else if ((maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
_e_border_move_resize_internal(bd, zx, y1, zw, h, 0, 1);
break;
@ -7019,10 +7061,10 @@ _e_border_eval0(E_Border *bd)
y2 = bd->zone->y + bd->zone->h;
/* walk through all shelves */
e_maximize_border_shelf_fill(bd, &x1, &y1, &x2, &y2, bd->maximized);
e_maximize_border_shelf_fill(bd, &x1, &y1, &x2, &y2, maximized);
/* walk through all windows */
e_maximize_border_border_fill(bd, &x1, &y1, &x2, &y2, bd->maximized);
e_maximize_border_border_fill(bd, &x1, &y1, &x2, &y2, maximized);
w = x2 - x1;
h = y2 - y1;
@ -7033,11 +7075,11 @@ _e_border_eval0(E_Border *bd)
x1 = x1 + (pw - w) / 2;
/* center y-direction */
y1 = y1 + (ph - h) / 2;
if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
if ((maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
_e_border_move_resize_internal(bd, x1, y1, w, h, 0, 1);
else if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
else if ((maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
_e_border_move_resize_internal(bd, bd->x, y1, bd->w, h, 0, 1);
else if ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
else if ((maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
_e_border_move_resize_internal(bd, x1, bd->y, w, bd->h, 0, 1);
break;
}
@ -8365,9 +8407,6 @@ _e_border_resize_begin(E_Border *bd)
(bd->fullscreen) || (bd->lock_user_size))
return 0;
if ((bd->maximized) && (!e_config->allow_manip))
return 0;
if (grabbed && !e_grabinput_get(bd->win, 0, bd->win))
{
grabbed = 0;
@ -8444,9 +8483,6 @@ _e_border_move_begin(E_Border *bd)
if ((bd->fullscreen) || (bd->lock_user_location))
return 0;
if ((bd->maximized) && (!e_config->allow_manip))
return 0;
if (grabbed && !e_grabinput_get(bd->win, 0, bd->win))
{
grabbed = 0;