e: tiling: add "send to corner" actions

As requested in #1457.

SVN revision: 76714
This commit is contained in:
Boris Faure 2012-09-16 19:59:08 +00:00
parent 6669ca71a3
commit 40adabe9ad
1 changed files with 98 additions and 1 deletions

View File

@ -110,7 +110,11 @@ static struct tiling_mod_main_g
*act_move_up,
*act_move_down,
*act_adjusttransitions,
*act_go;
*act_go,
*act_send_ne,
*act_send_nw,
*act_send_se,
*act_send_sw;
int warp_x,
warp_y,
@ -3337,6 +3341,81 @@ _e_mod_action_go_cb(E_Object *obj __UNUSED__,
_do_overlay(NULL, _action_go, INPUT_MODE_GOING);
}
/* }}} */
/* Send to a corner {{{ */
static void
_e_mod_action_send_cb(E_Object *obj __UNUSED__,
const char *params) EINA_ARG_NONNULL(2)
{
E_Desk *desk;
E_Border *bd;
int x, y, w, h;
geom_t g;
assert(params != NULL);
desk = get_current_desk();
if (!desk)
return;
bd = e_border_focused_get();
if (!bd || bd->desk != desk)
return;
if (!is_tilable(bd))
return;
check_tinfo(desk);
if (!_G.tinfo->conf)
return;
/* Fill initial values if not already done */
_get_or_create_border_extra(bd);
if (!tiling_g.config->show_titles) {
if ((bd->bordername && strcmp(bd->bordername, "pixel"))
|| !bd->bordername)
{
change_window_border(bd, "pixel");
}
}
if (bd->maximized)
_e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
/* add to floating */
if (!EINA_LIST_IS_IN(_G.tinfo->floating_windows, bd)) {
_remove_border(bd);
EINA_LIST_APPEND(_G.tinfo->floating_windows, bd);
}
e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
g.w = w / 2;
g.h = h / 2;
if (params[0] == 'n') {
g.y = 0;
if (params[1] == 'w') {
/* NW */
g.x = 0;
} else {
/* NE */
g.x = w / 2;
}
} else {
g.y = h / 2;
if (params[1] == 'w') {
/* SW */
g.x = 0;
} else {
/* SE */
g.x = w / 2;
}
}
_e_border_move_resize(bd, g.x, g.y, g.w, g.h);
}
/* }}} */
/* Hooks {{{*/
@ -3905,6 +3984,19 @@ e_modapi_init(E_Module *m)
ACTION_ADD(_G.act_go, _e_mod_action_go_cb,
"Focus a particular window", "go",
NULL, NULL, 0);
ACTION_ADD(_G.act_send_ne, _e_mod_action_send_cb,
"Send to upper right corner", "send_ne",
"ne", NULL, 0);
ACTION_ADD(_G.act_send_nw, _e_mod_action_send_cb,
"Send to upper left corner", "send_nw",
"nw", NULL, 0);
ACTION_ADD(_G.act_send_se, _e_mod_action_send_cb,
"Send to lower right corner", "send_se",
"se", NULL, 0);
ACTION_ADD(_G.act_send_sw, _e_mod_action_send_cb,
"Send to lower left corner", "send_sw",
"sw", NULL, 0);
#undef ACTION_ADD
/* Configuration entries */
@ -4020,6 +4112,11 @@ e_modapi_shutdown(E_Module *m __UNUSED__)
ACTION_DEL(_G.act_adjusttransitions, "Adjust transitions",
"adjust_transitions");
ACTION_DEL(_G.act_go, "Focus a particular window", "go");
ACTION_DEL(_G.act_send_ne, "Send to upper right corner", "send_ne");
ACTION_DEL(_G.act_send_nw, "Send to upper left corner", "send_nw");
ACTION_DEL(_G.act_send_se, "Send to lower right corner", "send_se");
ACTION_DEL(_G.act_send_sw, "Send to lower left corner", "send_sw");
#undef ACTION_DEL
e_configure_registry_item_del("windows/tiling");