}
static void
-_move_up_cols(E_Border *bd, Eina_Bool check_moving_anims)
-{
- E_Border *bd_1 = bd,
- *bd_2 = NULL;
- Border_Extra *extra_1 = NULL,
- *extra_2 = NULL;
- Eina_List *l_1 = NULL,
- *l_2 = NULL;
- int stack;
-
- stack = get_stack(bd);
- if (stack < 0)
- return;
-
- if (_G.tinfo->stacks[stack]->data == bd)
- return;
-
- l_1 = eina_list_data_find_list(_G.tinfo->stacks[stack], bd_1);
- if (!l_1 || !l_1->prev)
- return;
- l_2 = l_1->prev;
- bd_2 = l_2->data;
-
- extra_1 = eina_hash_find(_G.border_extras, &bd_1);
- if (!extra_1) {
- ERR("No extra for %p", bd_1);
- return;
- }
- extra_2 = eina_hash_find(_G.border_extras, &bd_2);
- if (!extra_2) {
- ERR("No extra for %p", bd_2);
- return;
- }
-
- l_1->data = bd_2;
- l_2->data = bd_1;
-
- extra_1->expected.y = extra_2->expected.y;
- extra_2->expected.y += extra_1->expected.h;
-
- _e_border_move(bd_1,
- extra_1->expected.x,
- extra_1->expected.y);
- _e_border_move(bd_2,
- extra_2->expected.x,
- extra_2->expected.y);
-
- if (check_moving_anims)
- _check_moving_anims(bd_1, extra_1, stack);
-
- ecore_x_pointer_warp(_G.tinfo->desk->zone->container->win,
- extra_1->expected.x + extra_1->expected.w/2,
- extra_1->expected.y + extra_1->expected.h/2);
-}
-
-static void
-_move_down_cols(E_Border *bd, Eina_Bool check_moving_anims)
+_move_right_rows_or_down_cols(E_Border *bd, Eina_Bool check_moving_anims)
{
E_Border *bd_1 = bd,
*bd_2 = NULL;
l_1->data = bd_2;
l_2->data = bd_1;
- extra_2->expected.y = extra_1->expected.y;
- extra_1->expected.y += extra_2->expected.h;
+ if (_G.tinfo->conf->use_rows) {
+ extra_2->expected.x = extra_1->expected.x;
+ extra_1->expected.x += extra_2->expected.w;
+ } else {
+ extra_2->expected.y = extra_1->expected.y;
+ extra_1->expected.y += extra_2->expected.h;
+ }
_e_border_move(bd_1,
extra_1->expected.x,
}
static void
-_move_left_cols(E_Border *bd, Eina_Bool check_moving_anims)
-{
- Border_Extra *extra;
- int stack;
- int i;
- int nb_stacks;
-
- stack = get_stack(bd);
- if (stack < 0)
- return;
-
- nb_stacks = get_stack_count();
-
- extra = eina_hash_find(_G.border_extras, &bd);
- if (!extra) {
- ERR("No extra for %p", bd);
- return;
- }
-
- if (stack == 0) {
- int x, y, w, h;
- int width = 0;
-
- if (nb_stacks >= TILING_MAX_STACKS)
- return;
- if (_G.tinfo->stacks[0]->data == bd && !_G.tinfo->stacks[0]->next)
- return;
-
- EINA_LIST_REMOVE(_G.tinfo->stacks[0], bd);
- for (i = TILING_MAX_STACKS - 1; i > 0; i--) {
- _G.tinfo->stacks[i] = _G.tinfo->stacks[i - 1];
- }
- _G.tinfo->stacks[0] = NULL;
- EINA_LIST_APPEND(_G.tinfo->stacks[0], bd);
-
- e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
-
- width = w / (nb_stacks + 1);
- _G.tinfo->pos[0] = x;
- _G.tinfo->size[0] = width;
- extra->expected.x = x;
- extra->expected.y = y;
- extra->expected.w = width;
- extra->expected.h = h;
-
- w -= width;
- x += width;
-
- for (i = 1; i <= nb_stacks; i++) {
- width = w / (nb_stacks + 1 - i);
-
- _set_stack_geometry(i, x, width);
-
- w -= width;
- x += width;
- }
- _reorganize_stack(1);
-
- _e_border_move_resize(bd,
- extra->expected.x,
- extra->expected.y,
- extra->expected.w,
- extra->expected.h);
- _e_border_maximize(bd, E_MAXIMIZE_EXPAND | E_MAXIMIZE_VERTICAL);
-
- if (nb_stacks + 1 > _G.tinfo->conf->nb_stacks) {
- _G.tinfo->conf->nb_stacks = nb_stacks + 1;
- e_config_save_queue();
- }
- if (check_moving_anims)
- _check_moving_anims(bd, extra, 0);
- ecore_x_pointer_warp(_G.tinfo->desk->zone->container->win,
- extra->expected.x + extra->expected.w/2,
- extra->expected.y + extra->expected.h/2);
- return;
- }
-
-
- EINA_LIST_REMOVE(_G.tinfo->stacks[stack], bd);
- EINA_LIST_APPEND(_G.tinfo->stacks[stack - 1], bd);
-
- if (!_G.tinfo->stacks[stack]) {
- int x, y, w, h;
-
- /* Remove stack */
- e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
-
- nb_stacks--;
-
- assert((0 <= nb_stacks) && (nb_stacks < TILING_MAX_STACKS - 1));
- for (i = stack; i < nb_stacks; i++) {
- _G.tinfo->stacks[i] = _G.tinfo->stacks[i+1];
- }
- _G.tinfo->stacks[nb_stacks] = NULL;
- for (i = 0; i < nb_stacks; i++) {
- int width;
-
- width = w / (nb_stacks - i);
-
- _set_stack_geometry(i, x, width);
-
- w -= width;
- x += width;
- }
- _reorganize_stack(stack - 1);
- } else {
- _reorganize_stack(stack);
- _reorganize_stack(stack - 1);
- }
-
- if (check_moving_anims)
- _check_moving_anims(bd, extra, stack - 1);
-
- ecore_x_pointer_warp(_G.tinfo->desk->zone->container->win,
- extra->expected.x + extra->expected.w/2,
- extra->expected.y + extra->expected.h/2);
-}
-
-static void
-_move_right_cols(E_Border *bd, Eina_Bool check_moving_anims)
-{
- int stack;
- int nb_stacks;
- Border_Extra *extra;
- int i;
-
- stack = get_stack(bd);
- assert(stack >= 0);
- if (stack == TILING_MAX_STACKS - 1)
- return;
-
- nb_stacks = get_stack_count();
- assert((0 < nb_stacks) && (nb_stacks < TILING_MAX_STACKS));
- if (stack == nb_stacks - 1 && !_G.tinfo->stacks[stack]->next)
- return;
-
- extra = eina_hash_find(_G.border_extras, &bd);
- if (!extra) {
- ERR("No extra for %p", bd);
- return;
- }
-
- EINA_LIST_REMOVE(_G.tinfo->stacks[stack], bd);
- EINA_LIST_APPEND(_G.tinfo->stacks[stack + 1], bd);
-
- if (_G.tinfo->stacks[stack] && _G.tinfo->stacks[stack + 1]->next) {
- _reorganize_stack(stack);
- _reorganize_stack(stack + 1);
- if (check_moving_anims)
- _check_moving_anims(bd, extra, stack + 1);
- } else
- if (_G.tinfo->stacks[stack]) {
- /* Add stack */
- int x, y, w, h;
- int width = 0;
-
- assert(nb_stacks < TILING_MAX_STACKS);
-
- _reorganize_stack(stack);
-
- e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
-
- for (i = 0; i < nb_stacks; i++) {
- width = w / (nb_stacks + 1 - i);
-
- _set_stack_geometry(i, x, width);
-
- w -= width;
- x += width;
- }
-
- _G.tinfo->pos[nb_stacks] = x;
- _G.tinfo->size[nb_stacks] = width;
- extra->expected.x = x;
- extra->expected.y = y;
- extra->expected.w = width;
- extra->expected.h = h;
- _e_border_move_resize(bd,
- extra->expected.x,
- extra->expected.y,
- extra->expected.w,
- extra->expected.h);
- _e_border_maximize(bd, E_MAXIMIZE_EXPAND | E_MAXIMIZE_VERTICAL);
-
- if (nb_stacks + 1 > _G.tinfo->conf->nb_stacks) {
- _G.tinfo->conf->nb_stacks = nb_stacks + 1;
- e_config_save_queue();
- }
- if (check_moving_anims)
- _check_moving_anims(bd, extra, stack + 1);
- } else {
- int x, y, w, h;
-
- /* Remove stack */
- e_zone_useful_geometry_get(_G.tinfo->desk->zone, &x, &y, &w, &h);
-
- nb_stacks--;
-
- assert((0 <= nb_stacks) && (nb_stacks < TILING_MAX_STACKS - 1));
- for (i = stack; i < nb_stacks; i++) {
- _G.tinfo->stacks[i] = _G.tinfo->stacks[i + 1];
- }
- for (i = 0; i < nb_stacks; i++) {
- int width;
-
- width = w / (nb_stacks - i);
-
- _set_stack_geometry(i, x, width);
-
- w -= width;
- x += width;
- }
- _G.tinfo->stacks[nb_stacks] = NULL;
- _G.tinfo->pos[nb_stacks] = 0;
- _G.tinfo->size[nb_stacks] = 0;
- _reorganize_stack(stack);
- if (check_moving_anims)
- _check_moving_anims(bd, extra, stack);
- }
-
- ecore_x_pointer_warp(_G.tinfo->desk->zone->container->win,
- extra->expected.x + extra->expected.w/2,
- extra->expected.y + extra->expected.h/2);
-}
-
-static void
-_move_left_rows(E_Border *bd, Eina_Bool check_moving_anims)
+_move_left_rows_or_up_cols(E_Border *bd, Eina_Bool check_moving_anims)
{
E_Border *bd_1 = bd,
*bd_2 = NULL;
l_1->data = bd_2;
l_2->data = bd_1;
- extra_1->expected.x = extra_2->expected.x;
- extra_2->expected.x += extra_1->expected.w;
-
- _e_border_move(bd_1,
- extra_1->expected.x,
- extra_1->expected.y);
- _e_border_move(bd_2,
- extra_2->expected.x,
- extra_2->expected.y);
-
- if (check_moving_anims)
- _check_moving_anims(bd_1, extra_1, stack);
-
- ecore_x_pointer_warp(_G.tinfo->desk->zone->container->win,
- extra_1->expected.x + extra_1->expected.w/2,
- extra_1->expected.y + extra_1->expected.h/2);
-}
-
-static void
-_move_right_rows(E_Border *bd, Eina_Bool check_moving_anims)
-{
- E_Border *bd_1 = bd,
- *bd_2 = NULL;
- Border_Extra *extra_1 = NULL,
- *extra_2 = NULL;
- Eina_List *l_1 = NULL,
- *l_2 = NULL;
- int stack;
-
- stack = get_stack(bd);
- assert(stack >= 0);
-
- l_1 = eina_list_data_find_list(_G.tinfo->stacks[stack], bd_1);
- if (!l_1 || !l_1->next)
- return;
- l_2 = l_1->next;
- bd_2 = l_2->data;
-
- extra_1 = eina_hash_find(_G.border_extras, &bd_1);
- if (!extra_1) {
- ERR("No extra for %p", bd_1);
- return;
- }
- extra_2 = eina_hash_find(_G.border_extras, &bd_2);
- if (!extra_2) {
- ERR("No extra for %p", bd_2);
- return;
+ if (_G.tinfo->conf->use_rows) {
+ extra_1->expected.x = extra_2->expected.x;
+ extra_2->expected.x += extra_1->expected.w;
+ } else {
+ extra_1->expected.y = extra_2->expected.y;
+ extra_2->expected.y += extra_1->expected.h;
}
- l_1->data = bd_2;
- l_2->data = bd_1;
-
- extra_2->expected.x = extra_1->expected.x;
- extra_1->expected.x += extra_2->expected.w;
-
_e_border_move(bd_1,
extra_1->expected.x,
extra_1->expected.y);
}
static void
-_move_up_rows(E_Border *bd, Eina_Bool check_moving_anims)
+_move_up_rows_or_left_cols(E_Border *bd, Eina_Bool check_moving_anims)
{
Border_Extra *extra;
int stack;
return;
}
- if (stack <= 0) {
- int x, y, w, h;
- int height = 0;
+ if (stack == 0) {
+ int x, y, w, h, s;
+ int size = 0, pos;
if (nb_stacks >= TILING_MAX_STACKS)
return;
e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
- height = h / (nb_stacks + 1);
- _G.tinfo->pos[0] = y;
- _G.tinfo->size[0] = height;
extra->expected.x = x;
extra->expected.y = y;
- extra->expected.w = w;
- extra->expected.h = height;
+ if (_G.tinfo->conf->use_rows) {
+ s = h;
+ pos = x;
+ size = s / (nb_stacks + 1);
+ extra->expected.w = w;
+ extra->expected.h = size;
+ } else {
+ s = w;
+ pos = y;
+ size = s / (nb_stacks + 1);
+ extra->expected.w = size;
+ extra->expected.h = h;
+ }
+ _G.tinfo->pos[0] = pos;
+ _G.tinfo->size[0] = size;
- h -= height;
- y += height;
+ s -= size;
+ pos += size;
for (i = 1; i <= nb_stacks; i++) {
- height = h / (nb_stacks + 1 - i);
+ size = s / (nb_stacks + 1 - i);
- _set_stack_geometry(i, y, height);
+ _set_stack_geometry(i, pos, size);
- h -= height;
- y += height;
+ s -= size;
+ pos += size;
}
_reorganize_stack(1);
return;
}
-
EINA_LIST_REMOVE(_G.tinfo->stacks[stack], bd);
EINA_LIST_APPEND(_G.tinfo->stacks[stack - 1], bd);
if (!_G.tinfo->stacks[stack]) {
- int x, y, w, h;
+ int pos, s;
/* Remove stack */
- e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
+ if (_G.tinfo->conf->use_rows) {
+ e_zone_useful_geometry_get(bd->zone,
+ NULL, &pos, NULL, &s);
+ } else {
+ e_zone_useful_geometry_get(bd->zone,
+ &pos, NULL, &s, NULL);
+ }
nb_stacks--;
}
_G.tinfo->stacks[nb_stacks] = NULL;
for (i = 0; i < nb_stacks; i++) {
- int height;
+ int size;
- height = h / (nb_stacks - i);
+ size = s / (nb_stacks - i);
- _set_stack_geometry(i, y, height);
+ _set_stack_geometry(i, pos, size);
- h -= height;
- y += height;
+ s -= size;
+ pos += size;
}
_reorganize_stack(stack - 1);
} else {
}
static void
-_move_down_rows(E_Border *bd, Eina_Bool check_moving_anims)
+_move_down_rows_or_right_cols(E_Border *bd, Eina_Bool check_moving_anims)
{
int stack;
int nb_stacks;
return;
nb_stacks = get_stack_count();
- assert(nb_stacks >= 1);
+ assert((0 < nb_stacks) && (nb_stacks < TILING_MAX_STACKS));
if (stack == nb_stacks - 1 && !_G.tinfo->stacks[stack]->next)
return;
} else
if (_G.tinfo->stacks[stack]) {
/* Add stack */
- int x, y, w, h;
- int height = 0;
+ int x, y, w, h, s;
+ int size = 0, pos;
assert(nb_stacks < TILING_MAX_STACKS);
e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
+ if (_G.tinfo->conf->use_rows) {
+ pos = y;
+ s = h;
+ } else {
+ pos = x;
+ s = w;
+ }
+
for (i = 0; i < nb_stacks; i++) {
- height = h / (nb_stacks + 1 - i);
+ size = s / (nb_stacks + 1 - i);
- _set_stack_geometry(i, y, height);
+ _set_stack_geometry(i, pos, size);
- h -= height;
- y += height;
+ s -= size;
+ pos += size;
}
- _G.tinfo->pos[nb_stacks] = y;
- _G.tinfo->size[nb_stacks] = height;
- extra->expected.x = x;
- extra->expected.y = y;
- extra->expected.w = w;
- extra->expected.h = height;
+ _G.tinfo->pos[nb_stacks] = pos;
+ _G.tinfo->size[nb_stacks] = size;
+ if (_G.tinfo->conf->use_rows) {
+ extra->expected.x = x;
+ extra->expected.y = pos;
+ extra->expected.w = w;
+ extra->expected.h = size;
+ } else {
+ extra->expected.x = pos;
+ extra->expected.y = y;
+ extra->expected.w = size;
+ extra->expected.h = h;
+ }
_e_border_move_resize(bd,
extra->expected.x,
extra->expected.y,
if (check_moving_anims)
_check_moving_anims(bd, extra, stack + 1);
} else {
- int x, y, w, h;
+ int x, y, w, h, s, pos;
/* Remove stack */
e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
for (i = stack; i < nb_stacks; i++) {
_G.tinfo->stacks[i] = _G.tinfo->stacks[i + 1];
}
+
+ if (_G.tinfo->conf->use_rows) {
+ pos = y;
+ s = h;
+ } else {
+ pos = x;
+ s = w;
+ }
+
for (i = 0; i < nb_stacks; i++) {
- int height;
+ int size;
- height = h / (nb_stacks - i);
+ size = s / (nb_stacks - i);
- _set_stack_geometry(i, y, height);
+ _set_stack_geometry(i, pos, size);
- h -= height;
- y += height;
+ s -= size;
+ pos += size;
}
_G.tinfo->stacks[nb_stacks] = NULL;
_G.tinfo->pos[nb_stacks] = 0;
|| (strcmp(ev->key, "k") == 0))
{
if (_G.tinfo->conf->use_rows)
- _move_up_rows(_G.focused_bd, true);
+ _move_up_rows_or_left_cols(_G.focused_bd, true);
else
- _move_up_cols(_G.focused_bd, true);
+ _move_left_rows_or_up_cols(_G.focused_bd, true);
return ECORE_CALLBACK_PASS_ON;
} else if ((strcmp(ev->key, "Down") == 0)
|| (strcmp(ev->key, "j") == 0))
{
if (_G.tinfo->conf->use_rows)
- _move_down_rows(_G.focused_bd, true);
+ _move_down_rows_or_right_cols(_G.focused_bd, true);
else
- _move_down_cols(_G.focused_bd, true);
+ _move_right_rows_or_down_cols(_G.focused_bd, true);
return ECORE_CALLBACK_PASS_ON;
} else if ((strcmp(ev->key, "Left") == 0)
|| (strcmp(ev->key, "h") == 0))
{
if (_G.tinfo->conf->use_rows)
- _move_left_rows(_G.focused_bd, true);
+ _move_left_rows_or_up_cols(_G.focused_bd, true);
else
- _move_left_cols(_G.focused_bd, true);
+ _move_up_rows_or_left_cols(_G.focused_bd, true);
return ECORE_CALLBACK_PASS_ON;
} else if ((strcmp(ev->key, "Right") == 0)
|| (strcmp(ev->key, "l") == 0))
{
if (_G.tinfo->conf->use_rows)
- _move_right_rows(_G.focused_bd, true);
+ _move_right_rows_or_down_cols(_G.focused_bd, true);
else
- _move_right_cols(_G.focused_bd, true);
+ _move_down_rows_or_right_cols(_G.focused_bd, true);
return ECORE_CALLBACK_PASS_ON;
}
switch (params[0]) {
case 'l': /* left */
if (_G.tinfo->conf->use_rows)
- _move_left_rows(focused_bd, false);
+ _move_left_rows_or_up_cols(focused_bd, false);
else
- _move_left_cols(focused_bd, false);
+ _move_up_rows_or_left_cols(focused_bd, false);
break;
case 'r': /* right */
if (_G.tinfo->conf->use_rows)
- _move_right_rows(focused_bd, false);
+ _move_right_rows_or_down_cols(focused_bd, false);
else
- _move_right_cols(focused_bd, false);
+ _move_down_rows_or_right_cols(focused_bd, false);
break;
case 'u': /* up */
if (_G.tinfo->conf->use_rows)
- _move_up_rows(focused_bd, false);
+ _move_up_rows_or_left_cols(focused_bd, false);
else
- _move_up_cols(focused_bd, false);
+ _move_left_rows_or_up_cols(focused_bd, false);
break;
case 'd': /* down */
if (_G.tinfo->conf->use_rows)
- _move_down_rows(focused_bd, false);
+ _move_down_rows_or_right_cols(focused_bd, false);
else
- _move_down_cols(focused_bd, false);
+ _move_right_rows_or_down_cols(focused_bd, false);
break;
}
}