Improve resize_find_tiling_participants() and simplify cmd_resize_tiling_width_height() (#3111)
This commit is contained in:
parent
2f29fce801
commit
c0378f737b
|
@ -11,6 +11,6 @@
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
bool resize_find_tiling_participants(Con **current, Con **other, direction_t direction);
|
bool resize_find_tiling_participants(Con **current, Con **other, direction_t direction, bool both_sides);
|
||||||
|
|
||||||
int resize_graphical_handler(Con *first, Con *second, orientation_t orientation, const xcb_button_press_event_t *event);
|
int resize_graphical_handler(Con *first, Con *second, orientation_t orientation, const xcb_button_press_event_t *event);
|
||||||
|
|
|
@ -49,7 +49,7 @@ static bool tiling_resize_for_border(Con *con, border_t border, xcb_button_press
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool res = resize_find_tiling_participants(&first, &second, search_direction);
|
bool res = resize_find_tiling_participants(&first, &second, search_direction, false);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
LOG("No second container in this direction found.\n");
|
LOG("No second container in this direction found.\n");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -511,7 +511,7 @@ static bool cmd_resize_tiling_direction(I3_CMD, Con *current, const char *way, c
|
||||||
else
|
else
|
||||||
search_direction = D_DOWN;
|
search_direction = D_DOWN;
|
||||||
|
|
||||||
bool res = resize_find_tiling_participants(&first, &second, search_direction);
|
bool res = resize_find_tiling_participants(&first, &second, search_direction, false);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
LOG("No second container in this direction found.\n");
|
LOG("No second container in this direction found.\n");
|
||||||
ysuccess(false);
|
ysuccess(false);
|
||||||
|
@ -552,19 +552,15 @@ static bool cmd_resize_tiling_direction(I3_CMD, Con *current, const char *way, c
|
||||||
|
|
||||||
static bool cmd_resize_tiling_width_height(I3_CMD, Con *current, const char *way, const char *direction, int ppt) {
|
static bool cmd_resize_tiling_width_height(I3_CMD, Con *current, const char *way, const char *direction, int ppt) {
|
||||||
LOG("width/height resize\n");
|
LOG("width/height resize\n");
|
||||||
|
|
||||||
/* get the appropriate current container (skip stacked/tabbed cons) */
|
/* get the appropriate current container (skip stacked/tabbed cons) */
|
||||||
while (current->parent->layout == L_STACKED ||
|
Con *dummy = NULL;
|
||||||
current->parent->layout == L_TABBED)
|
direction_t search_direction = (strcmp(direction, "width") == 0 ? D_LEFT : D_DOWN);
|
||||||
current = current->parent;
|
bool search_result = resize_find_tiling_participants(¤t, &dummy, search_direction, true);
|
||||||
|
if (search_result == false) {
|
||||||
/* Then further go up until we find one with the matching orientation. */
|
ysuccess(false);
|
||||||
orientation_t search_orientation =
|
return false;
|
||||||
(strcmp(direction, "width") == 0 ? HORIZ : VERT);
|
}
|
||||||
|
|
||||||
while (current->type != CT_WORKSPACE &&
|
|
||||||
current->type != CT_FLOATING_CON &&
|
|
||||||
(con_orientation(current->parent) != search_orientation || con_num_children(current->parent) == 1))
|
|
||||||
current = current->parent;
|
|
||||||
|
|
||||||
/* get the default percentage */
|
/* get the default percentage */
|
||||||
int children = con_num_children(current->parent);
|
int children = con_num_children(current->parent);
|
||||||
|
@ -572,24 +568,6 @@ static bool cmd_resize_tiling_width_height(I3_CMD, Con *current, const char *way
|
||||||
double percentage = 1.0 / children;
|
double percentage = 1.0 / children;
|
||||||
LOG("default percentage = %f\n", percentage);
|
LOG("default percentage = %f\n", percentage);
|
||||||
|
|
||||||
orientation_t orientation = con_orientation(current->parent);
|
|
||||||
|
|
||||||
if ((orientation == HORIZ &&
|
|
||||||
strcmp(direction, "height") == 0) ||
|
|
||||||
(orientation == VERT &&
|
|
||||||
strcmp(direction, "width") == 0)) {
|
|
||||||
LOG("You cannot resize in that direction. Your focus is in a %s split container currently.\n",
|
|
||||||
(orientation == HORIZ ? "horizontal" : "vertical"));
|
|
||||||
ysuccess(false);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (children == 1) {
|
|
||||||
LOG("This is the only container, cannot resize.\n");
|
|
||||||
ysuccess(false);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ensure all the other children have a percentage set. */
|
/* Ensure all the other children have a percentage set. */
|
||||||
Con *child;
|
Con *child;
|
||||||
TAILQ_FOREACH(child, &(current->parent->nodes_head), nodes) {
|
TAILQ_FOREACH(child, &(current->parent->nodes_head), nodes) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ DRAGGING_CB(resize_callback) {
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool resize_find_tiling_participants(Con **current, Con **other, direction_t direction) {
|
bool resize_find_tiling_participants(Con **current, Con **other, direction_t direction, bool both_sides) {
|
||||||
DLOG("Find two participants for resizing container=%p in direction=%i\n", other, direction);
|
DLOG("Find two participants for resizing container=%p in direction=%i\n", other, direction);
|
||||||
Con *first = *current;
|
Con *first = *current;
|
||||||
Con *second = NULL;
|
Con *second = NULL;
|
||||||
|
@ -74,8 +74,14 @@ bool resize_find_tiling_participants(Con **current, Con **other, direction_t dir
|
||||||
/* get the counterpart for this resizement */
|
/* get the counterpart for this resizement */
|
||||||
if (dir_backwards) {
|
if (dir_backwards) {
|
||||||
second = TAILQ_PREV(first, nodes_head, nodes);
|
second = TAILQ_PREV(first, nodes_head, nodes);
|
||||||
|
if (second == NULL && both_sides == true) {
|
||||||
|
second = TAILQ_NEXT(first, nodes);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
second = TAILQ_NEXT(first, nodes);
|
second = TAILQ_NEXT(first, nodes);
|
||||||
|
if (second == NULL && both_sides == true) {
|
||||||
|
second = TAILQ_PREV(first, nodes_head, nodes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (second == NULL) {
|
if (second == NULL) {
|
||||||
|
|
Loading…
Reference in New Issue