add two new maximize modes: left and right

these will maximize a window to either the left or the right half of the screen, respectively
work started by etrunko in ticket #1422


SVN revision: 76198
This commit is contained in:
Mike Blumenkrantz 2012-09-05 13:46:15 +00:00
parent 765c24f6c6
commit f1e4a5909f
7 changed files with 182 additions and 18 deletions

View File

@ -554,6 +554,22 @@ group "E_Config" struct {
value "params" string: "default horizontal";
value "any_mod" uchar: 0;
}
group "E_Config_Binding_Key" struct {
value "context" int: 9;
value "modifiers" int: 8;
value "key" string: "Left";
value "action" string: "window_maximized_toggle";
value "params" string: "default left";
value "any_mod" uchar: 0;
}
group "E_Config_Binding_Key" struct {
value "context" int: 9;
value "modifiers" int: 8;
value "key" string: "Right";
value "action" string: "window_maximized_toggle";
value "params" string: "default right";
value "any_mod" uchar: 0;
}
group "E_Config_Binding_Key" struct {
value "context" int: 9;
value "modifiers" int: 6;

View File

@ -1340,6 +1340,22 @@ group "E_Config" struct {
value "params" string: "default horizontal";
value "any_mod" uchar: 0;
}
group "E_Config_Binding_Key" struct {
value "context" int: 9;
value "modifiers" int: 8;
value "key" string: "Left";
value "action" string: "window_maximized_toggle";
value "params" string: "default left";
value "any_mod" uchar: 0;
}
group "E_Config_Binding_Key" struct {
value "context" int: 9;
value "modifiers" int: 8;
value "key" string: "Right";
value "action" string: "window_maximized_toggle";
value "params" string: "default right";
value "any_mod" uchar: 0;
}
group "E_Config_Binding_Key" struct {
value "context" int: 9;
value "modifiers" int: 6;

View File

@ -589,6 +589,20 @@ ACT_FN_GO(window_maximized_toggle, )
else
goto maximize;
}
else if (max == E_MAXIMIZE_LEFT)
{
if (bd->maximized & E_MAXIMIZE_LEFT)
e_border_unmaximize(bd, E_MAXIMIZE_LEFT);
else
goto maximize;
}
else if (max == E_MAXIMIZE_RIGHT)
{
if (bd->maximized & E_MAXIMIZE_RIGHT)
e_border_unmaximize(bd, E_MAXIMIZE_RIGHT);
else
goto maximize;
}
else
e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
}
@ -3612,6 +3626,10 @@ _e_actions_maximize_parse(const char *params)
max = E_MAXIMIZE_HORIZONTAL;
else if (!strcmp(s2, "vertical"))
max = E_MAXIMIZE_VERTICAL;
else if (!strcmp(s2, "left"))
max = E_MAXIMIZE_LEFT;
else if (!strcmp(s2, "right"))
max = E_MAXIMIZE_RIGHT;
else
max = E_MAXIMIZE_BOTH;
}

View File

@ -2631,12 +2631,28 @@ _e_border_maximize(E_Border *bd, E_Maximize max)
/* center y-direction */
yy1 = bd->zone->y + (bd->zone->h - h) / 2;
if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
e_border_move_resize(bd, x1, yy1, w, h);
else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
e_border_move_resize(bd, bd->x, yy1, bd->w, h);
else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
e_border_move_resize(bd, x1, bd->y, w, bd->h);
switch (max & E_MAXIMIZE_DIRECTION)
{
case E_MAXIMIZE_BOTH:
e_border_move_resize(bd, x1, yy1, w, h);
break;
case E_MAXIMIZE_VERTICAL:
e_border_move_resize(bd, bd->x, yy1, bd->w, h);
break;
case E_MAXIMIZE_HORIZONTAL:
e_border_move_resize(bd, x1, bd->y, w, bd->h);
break;
case E_MAXIMIZE_LEFT:
e_border_move_resize(bd, bd->zone->x, bd->zone->y, w / 2, h);
break;
case E_MAXIMIZE_RIGHT:
e_border_move_resize(bd, x1, bd->zone->y, w / 2, h);
break;
}
break;
case E_MAXIMIZE_SMART:
@ -2668,12 +2684,29 @@ _e_border_maximize(E_Border *bd, E_Maximize max)
else // window normal position
yy1 = bd->y;
if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
e_border_move_resize(bd, zx, zy, zw, zh);
else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
e_border_move_resize(bd, x1, zy, w, zh);
else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
e_border_move_resize(bd, zx, yy1, zw, h);
switch (max & E_MAXIMIZE_DIRECTION)
{
case E_MAXIMIZE_BOTH:
e_border_move_resize(bd, zx, zy, zw, zh);
break;
case E_MAXIMIZE_VERTICAL:
e_border_move_resize(bd, x1, zy, w, zh);
break;
case E_MAXIMIZE_HORIZONTAL:
e_border_move_resize(bd, zx, yy1, zw, h);
break;
case E_MAXIMIZE_LEFT:
e_border_move_resize(bd, zx, zy, zw / 2, zh);
break;
case E_MAXIMIZE_RIGHT:
e_border_move_resize(bd, zx + zw / 2, zy, zw / 2, zh);
break;
}
edje_object_signal_emit(bd->bg_object, "e,action,maximize", "e");
break;
@ -2698,12 +2731,29 @@ _e_border_maximize(E_Border *bd, E_Maximize max)
x1 = x1 + (pw - w) / 2;
/* center y-direction */
yy1 = yy1 + (ph - h) / 2;
if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
e_border_move_resize(bd, x1, yy1, w, h);
else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
e_border_move_resize(bd, bd->x, yy1, bd->w, h);
else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
e_border_move_resize(bd, x1, bd->y, w, bd->h);
switch (max & E_MAXIMIZE_DIRECTION)
{
case E_MAXIMIZE_BOTH:
e_border_move_resize(bd, x1, yy1, w, h);
break;
case E_MAXIMIZE_VERTICAL:
e_border_move_resize(bd, bd->x, yy1, bd->w, h);
break;
case E_MAXIMIZE_HORIZONTAL:
e_border_move_resize(bd, x1, bd->y, w, bd->h);
break;
case E_MAXIMIZE_LEFT:
e_border_move_resize(bd, bd->zone->x, bd->zone->y, w / 2, h);
break;
case E_MAXIMIZE_RIGHT:
e_border_move_resize(bd, x1, bd->zone->y, w / 2, h);
break;
}
break;
}
}
@ -2818,6 +2868,8 @@ e_border_unmaximize(E_Border *bd,
y = bd->saved.y + bd->zone->y;
bd->saved.h = bd->saved.y = 0;
bd->maximized &= ~E_MAXIMIZE_VERTICAL;
bd->maximized &= ~E_MAXIMIZE_LEFT;
bd->maximized &= ~E_MAXIMIZE_RIGHT;
}
if (max & E_MAXIMIZE_HORIZONTAL)
{

View File

@ -61,6 +61,8 @@ typedef enum _E_Maximize
E_MAXIMIZE_VERTICAL = 0x00000010,
E_MAXIMIZE_HORIZONTAL = 0x00000020,
E_MAXIMIZE_BOTH = 0x00000030,
E_MAXIMIZE_LEFT = 0x00000060,
E_MAXIMIZE_RIGHT = 0x00000090,
E_MAXIMIZE_DIRECTION = 0x000000f0
} E_Maximize;

View File

@ -13,6 +13,8 @@ static void _e_border_menu_cb_maximize_pre(void *data, E_Menu *m, E_Menu_Item *m
static void _e_border_menu_cb_maximize(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize_vertically(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize_horizontally(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize_left(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize_right(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_unmaximize(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_resistance(void *data, E_Menu *m, E_Menu_Item *mi);
@ -411,6 +413,28 @@ _e_border_menu_cb_maximize_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi
"e/widgets/border/default/maximize"),
"e/widgets/border/default/maximize");
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Maximize left"));
e_menu_item_radio_set(submi, 1);
e_menu_item_radio_group_set(submi, 3);
e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_LEFT);
e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_left, bd);
e_menu_item_icon_edje_set(submi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/maximize"),
"e/widgets/border/default/maximize");
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Maximize right"));
e_menu_item_radio_set(submi, 1);
e_menu_item_radio_group_set(submi, 3);
e_menu_item_toggle_set(submi, (bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_RIGHT);
e_menu_item_callback_set(submi, _e_border_menu_cb_maximize_right, bd);
e_menu_item_icon_edje_set(submi,
e_theme_edje_file_get("base/theme/borders",
"e/widgets/border/default/maximize"),
"e/widgets/border/default/maximize");
submi = e_menu_item_new(subm);
e_menu_item_label_set(submi, _("Unmaximize"));
e_menu_item_radio_set(submi, 1);
@ -465,6 +489,36 @@ _e_border_menu_cb_maximize_horizontally(void *data, E_Menu *m __UNUSED__, E_Menu
}
}
static void
_e_border_menu_cb_maximize_left(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_maximize)
{
if ((bd->maximized & E_MAXIMIZE_DIRECTION))
e_border_unmaximize(bd, bd->maximized & E_MAXIMIZE_DIRECTION);
e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
E_MAXIMIZE_LEFT);
}
}
static void
_e_border_menu_cb_maximize_right(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{
E_Border *bd;
bd = data;
if (!bd->lock_user_maximize)
{
if ((bd->maximized & E_MAXIMIZE_DIRECTION))
e_border_unmaximize(bd, bd->maximized & E_MAXIMIZE_DIRECTION);
e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) |
E_MAXIMIZE_RIGHT);
}
}
static void
_e_border_menu_cb_unmaximize(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
{

View File

@ -531,6 +531,12 @@ _restore_key_binding_defaults_cb(void *data,
CFG_KEYBIND_DFLT(E_BINDING_CONTEXT_ANY, "F10",
E_BINDING_MODIFIER_CTRL, 0,
"window_maximized_toggle", "default horizontal");
CFG_KEYBIND_DFLT(E_BINDING_CONTEXT_ANY, "Left",
E_BINDING_MODIFIER_WIN, 0,
"window_maximized_toggle", "default left");
CFG_KEYBIND_DFLT(E_BINDING_CONTEXT_ANY, "Right",
E_BINDING_MODIFIER_WIN, 0,
"window_maximized_toggle", "default right");
CFG_KEYBIND_DFLT(E_BINDING_CONTEXT_ANY, "r",
E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"window_shaded_toggle", NULL);