tree/container: introduce container_toplevel_ancestor
helper
This allows us to not have to explicitly write the same while loop everywhere.
This commit is contained in:
parent
d7900c6e5e
commit
53dc83fb68
|
@ -272,6 +272,13 @@ void container_set_fullscreen(struct sway_container *con,
|
||||||
*/
|
*/
|
||||||
void container_fullscreen_disable(struct sway_container *con);
|
void container_fullscreen_disable(struct sway_container *con);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Walk up the container tree branch starting at the given container, and return
|
||||||
|
* its earliest ancestor.
|
||||||
|
*/
|
||||||
|
struct sway_container *container_toplevel_ancestor(
|
||||||
|
struct sway_container *container);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the container is floating, or a child of a floating split
|
* Return true if the container is floating, or a child of a floating split
|
||||||
* container.
|
* container.
|
||||||
|
|
|
@ -338,10 +338,7 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
|
||||||
if (button == btn_move && (mod_pressed || on_titlebar)) {
|
if (button == btn_move && (mod_pressed || on_titlebar)) {
|
||||||
seat_set_focus_container(seat,
|
seat_set_focus_container(seat,
|
||||||
seat_get_focus_inactive_view(seat, &cont->node));
|
seat_get_focus_inactive_view(seat, &cont->node));
|
||||||
while (cont->parent) {
|
seatop_begin_move_floating(seat, container_toplevel_ancestor(cont));
|
||||||
cont = cont->parent;
|
|
||||||
}
|
|
||||||
seatop_begin_move_floating(seat, cont);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -359,10 +356,7 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
|
||||||
uint32_t btn_resize = config->floating_mod_inverse ?
|
uint32_t btn_resize = config->floating_mod_inverse ?
|
||||||
BTN_LEFT : BTN_RIGHT;
|
BTN_LEFT : BTN_RIGHT;
|
||||||
if (mod_pressed && button == btn_resize) {
|
if (mod_pressed && button == btn_resize) {
|
||||||
struct sway_container *floater = cont;
|
struct sway_container *floater = container_toplevel_ancestor(cont);
|
||||||
while (floater->parent) {
|
|
||||||
floater = floater->parent;
|
|
||||||
}
|
|
||||||
edge = 0;
|
edge = 0;
|
||||||
edge |= cursor->cursor->x > floater->x + floater->width / 2 ?
|
edge |= cursor->cursor->x > floater->x + floater->width / 2 ?
|
||||||
WLR_EDGE_RIGHT : WLR_EDGE_LEFT;
|
WLR_EDGE_RIGHT : WLR_EDGE_LEFT;
|
||||||
|
|
|
@ -1108,11 +1108,17 @@ void container_set_fullscreen(struct sway_container *con,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool container_is_floating_or_child(struct sway_container *container) {
|
struct sway_container *container_toplevel_ancestor(
|
||||||
|
struct sway_container *container) {
|
||||||
while (container->parent) {
|
while (container->parent) {
|
||||||
container = container->parent;
|
container = container->parent;
|
||||||
}
|
}
|
||||||
return container_is_floating(container);
|
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool container_is_floating_or_child(struct sway_container *container) {
|
||||||
|
return container_is_floating(container_toplevel_ancestor(container));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool container_is_fullscreen_or_child(struct sway_container *container) {
|
bool container_is_fullscreen_or_child(struct sway_container *container) {
|
||||||
|
@ -1537,10 +1543,7 @@ void container_update_marks_textures(struct sway_container *con) {
|
||||||
|
|
||||||
void container_raise_floating(struct sway_container *con) {
|
void container_raise_floating(struct sway_container *con) {
|
||||||
// Bring container to front by putting it at the end of the floating list.
|
// Bring container to front by putting it at the end of the floating list.
|
||||||
struct sway_container *floater = con;
|
struct sway_container *floater = container_toplevel_ancestor(con);
|
||||||
while (floater->parent) {
|
|
||||||
floater = floater->parent;
|
|
||||||
}
|
|
||||||
if (container_is_floating(floater) && floater->workspace) {
|
if (container_is_floating(floater) && floater->workspace) {
|
||||||
list_move_to_end(floater->workspace->floating, floater);
|
list_move_to_end(floater->workspace->floating, floater);
|
||||||
node_set_dirty(&floater->workspace->node);
|
node_set_dirty(&floater->workspace->node);
|
||||||
|
@ -1552,8 +1555,6 @@ bool container_is_scratchpad_hidden(struct sway_container *con) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool container_is_scratchpad_hidden_or_child(struct sway_container *con) {
|
bool container_is_scratchpad_hidden_or_child(struct sway_container *con) {
|
||||||
while (con->parent) {
|
con = container_toplevel_ancestor(con);
|
||||||
con = con->parent;
|
|
||||||
}
|
|
||||||
return con->scratchpad && !con->workspace;
|
return con->scratchpad && !con->workspace;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue