mirror of
https://github.com/swaywm/sway.git
synced 2025-11-08 13:29:50 -05:00
Remove layout.c
When we have type safety we'll need to have functions for
workspace_add_tiling and so on. This means the existing container
functions will be just for containers, so they are being moved to
container.c. At this point layout.c doesn't contain much else, so I've
relocated everything and removed the file.
* container_swap and its static functions have been moved to the swap
command and made static.
* container_recursive_resize has been moved to the resize command and
made static.
* The following have been moved to container.c:
* container_handle_fullscreen_reparent
* container_insert_child
* container_add_sibling
* container_add_child
* container_remove_child
* container_replace_child
* container_split
* enum movement_direction and sway_dir_to_wlr have been moved to util.c.
Side note: Several commands included layout.h which then included
root.h. With layout.h gone, root.h has to be included by those commands.
This commit is contained in:
parent
1a30c50ef4
commit
5dbbab7bdc
38 changed files with 449 additions and 479 deletions
|
|
@ -8,6 +8,7 @@
|
|||
#include "sway/commands.h"
|
||||
#include "sway/config.h"
|
||||
#include "sway/tree/container.h"
|
||||
#include "sway/tree/root.h"
|
||||
#include "sway/tree/workspace.h"
|
||||
#include "log.h"
|
||||
#include "stringop.h"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
#include "sway/output.h"
|
||||
#include "sway/tree/arrange.h"
|
||||
#include "sway/tree/container.h"
|
||||
#include "sway/tree/layout.h"
|
||||
#include "sway/tree/view.h"
|
||||
#include "sway/tree/workspace.h"
|
||||
#include "list.h"
|
||||
|
|
|
|||
|
|
@ -6,9 +6,11 @@
|
|||
#include "sway/input/seat.h"
|
||||
#include "sway/output.h"
|
||||
#include "sway/tree/arrange.h"
|
||||
#include "sway/tree/root.h"
|
||||
#include "sway/tree/view.h"
|
||||
#include "sway/tree/workspace.h"
|
||||
#include "stringop.h"
|
||||
#include "util.h"
|
||||
|
||||
static bool parse_movement_direction(const char *name,
|
||||
enum movement_direction *out) {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
#include "sway/tree/container.h"
|
||||
#include "sway/tree/view.h"
|
||||
#include "sway/tree/workspace.h"
|
||||
#include "sway/tree/layout.h"
|
||||
#include "util.h"
|
||||
|
||||
struct cmd_results *cmd_fullscreen(int argc, char **argv) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include "sway/commands.h"
|
||||
#include "sway/config.h"
|
||||
#include "sway/tree/container.h"
|
||||
#include "sway/tree/root.h"
|
||||
#include "sway/tree/view.h"
|
||||
|
||||
static void _configure_view(struct sway_container *con, void *data) {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include "stringop.h"
|
||||
#include "list.h"
|
||||
#include "log.h"
|
||||
#include "util.h"
|
||||
|
||||
static const char *expected_syntax =
|
||||
"Expected 'move <left|right|up|down> <[px] px>' or "
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#include "sway/commands.h"
|
||||
#include "sway/config.h"
|
||||
#include "sway/output.h"
|
||||
#include "sway/tree/layout.h"
|
||||
#include "list.h"
|
||||
#include "log.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -159,6 +159,27 @@ static int parallel_size(struct sway_container *c, enum resize_axis a) {
|
|||
return normalize_axis(a) == RESIZE_AXIS_HORIZONTAL ? c->width : c->height;
|
||||
}
|
||||
|
||||
static void container_recursive_resize(struct sway_container *container,
|
||||
double amount, enum wlr_edges edge) {
|
||||
bool layout_match = true;
|
||||
wlr_log(WLR_DEBUG, "Resizing %p with amount: %f", container, amount);
|
||||
if (edge == WLR_EDGE_LEFT || edge == WLR_EDGE_RIGHT) {
|
||||
container->width += amount;
|
||||
layout_match = container->layout == L_HORIZ;
|
||||
} else if (edge == WLR_EDGE_TOP || edge == WLR_EDGE_BOTTOM) {
|
||||
container->height += amount;
|
||||
layout_match = container->layout == L_VERT;
|
||||
}
|
||||
if (container->children) {
|
||||
for (int i = 0; i < container->children->length; i++) {
|
||||
struct sway_container *child = container->children->items[i];
|
||||
double amt = layout_match ?
|
||||
amount / container->children->length : amount;
|
||||
container_recursive_resize(child, amt, edge);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void resize_tiled(struct sway_container *parent, int amount,
|
||||
enum resize_axis axis) {
|
||||
struct sway_container *focused = parent;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include <string.h>
|
||||
#include "sway/commands.h"
|
||||
#include "sway/config.h"
|
||||
#include "sway/tree/root.h"
|
||||
#include "sway/tree/view.h"
|
||||
#include "sway/output.h"
|
||||
#include "list.h"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
#include "sway/output.h"
|
||||
#include "sway/tree/arrange.h"
|
||||
#include "sway/tree/container.h"
|
||||
#include "sway/tree/layout.h"
|
||||
#include "sway/tree/view.h"
|
||||
#include "sway/tree/workspace.h"
|
||||
#include "list.h"
|
||||
|
|
|
|||
|
|
@ -1,15 +1,141 @@
|
|||
#define _POSIX_C_SOURCE 200809L
|
||||
#include <strings.h>
|
||||
#include <wlr/util/log.h>
|
||||
#include "config.h"
|
||||
#include "log.h"
|
||||
#include "sway/commands.h"
|
||||
#include "sway/tree/arrange.h"
|
||||
#include "sway/tree/layout.h"
|
||||
#include "sway/tree/root.h"
|
||||
#include "sway/tree/view.h"
|
||||
#include "sway/tree/workspace.h"
|
||||
#include "stringop.h"
|
||||
|
||||
static const char* EXPECTED_SYNTAX =
|
||||
"Expected 'swap container with id|con_id|mark <arg>'";
|
||||
|
||||
static void swap_places(struct sway_container *con1,
|
||||
struct sway_container *con2) {
|
||||
struct sway_container *temp = malloc(sizeof(struct sway_container));
|
||||
temp->x = con1->x;
|
||||
temp->y = con1->y;
|
||||
temp->width = con1->width;
|
||||
temp->height = con1->height;
|
||||
temp->parent = con1->parent;
|
||||
|
||||
con1->x = con2->x;
|
||||
con1->y = con2->y;
|
||||
con1->width = con2->width;
|
||||
con1->height = con2->height;
|
||||
|
||||
con2->x = temp->x;
|
||||
con2->y = temp->y;
|
||||
con2->width = temp->width;
|
||||
con2->height = temp->height;
|
||||
|
||||
int temp_index = container_sibling_index(con1);
|
||||
container_insert_child(con2->parent, con1, container_sibling_index(con2));
|
||||
container_insert_child(temp->parent, con2, temp_index);
|
||||
|
||||
free(temp);
|
||||
}
|
||||
|
||||
static void swap_focus(struct sway_container *con1,
|
||||
struct sway_container *con2, struct sway_seat *seat,
|
||||
struct sway_container *focus) {
|
||||
if (focus == con1 || focus == con2) {
|
||||
struct sway_container *ws1 = container_parent(con1, C_WORKSPACE);
|
||||
struct sway_container *ws2 = container_parent(con2, C_WORKSPACE);
|
||||
if (focus == con1 && (con2->parent->layout == L_TABBED
|
||||
|| con2->parent->layout == L_STACKED)) {
|
||||
if (workspace_is_visible(ws2)) {
|
||||
seat_set_focus_warp(seat, con2, false, true);
|
||||
}
|
||||
seat_set_focus(seat, ws1 != ws2 ? con2 : con1);
|
||||
} else if (focus == con2 && (con1->parent->layout == L_TABBED
|
||||
|| con1->parent->layout == L_STACKED)) {
|
||||
if (workspace_is_visible(ws1)) {
|
||||
seat_set_focus_warp(seat, con1, false, true);
|
||||
}
|
||||
seat_set_focus(seat, ws1 != ws2 ? con1 : con2);
|
||||
} else if (ws1 != ws2) {
|
||||
seat_set_focus(seat, focus == con1 ? con2 : con1);
|
||||
} else {
|
||||
seat_set_focus(seat, focus);
|
||||
}
|
||||
} else {
|
||||
seat_set_focus(seat, focus);
|
||||
}
|
||||
}
|
||||
|
||||
static void container_swap(struct sway_container *con1,
|
||||
struct sway_container *con2) {
|
||||
if (!sway_assert(con1 && con2, "Cannot swap with nothing")) {
|
||||
return;
|
||||
}
|
||||
if (!sway_assert(con1->type >= C_CONTAINER && con2->type >= C_CONTAINER,
|
||||
"Can only swap containers and views")) {
|
||||
return;
|
||||
}
|
||||
if (!sway_assert(!container_has_ancestor(con1, con2)
|
||||
&& !container_has_ancestor(con2, con1),
|
||||
"Cannot swap ancestor and descendant")) {
|
||||
return;
|
||||
}
|
||||
if (!sway_assert(!container_is_floating(con1)
|
||||
&& !container_is_floating(con2),
|
||||
"Swapping with floating containers is not supported")) {
|
||||
return;
|
||||
}
|
||||
|
||||
wlr_log(WLR_DEBUG, "Swapping containers %zu and %zu", con1->id, con2->id);
|
||||
|
||||
int fs1 = con1->is_fullscreen;
|
||||
int fs2 = con2->is_fullscreen;
|
||||
if (fs1) {
|
||||
container_set_fullscreen(con1, false);
|
||||
}
|
||||
if (fs2) {
|
||||
container_set_fullscreen(con2, false);
|
||||
}
|
||||
|
||||
struct sway_seat *seat = input_manager_get_default_seat(input_manager);
|
||||
struct sway_container *focus = seat_get_focus(seat);
|
||||
struct sway_container *vis1 = container_parent(
|
||||
seat_get_focus_inactive(seat, container_parent(con1, C_OUTPUT)),
|
||||
C_WORKSPACE);
|
||||
struct sway_container *vis2 = container_parent(
|
||||
seat_get_focus_inactive(seat, container_parent(con2, C_OUTPUT)),
|
||||
C_WORKSPACE);
|
||||
|
||||
char *stored_prev_name = NULL;
|
||||
if (prev_workspace_name) {
|
||||
stored_prev_name = strdup(prev_workspace_name);
|
||||
}
|
||||
|
||||
swap_places(con1, con2);
|
||||
|
||||
if (!workspace_is_visible(vis1)) {
|
||||
seat_set_focus(seat, seat_get_focus_inactive(seat, vis1));
|
||||
}
|
||||
if (!workspace_is_visible(vis2)) {
|
||||
seat_set_focus(seat, seat_get_focus_inactive(seat, vis2));
|
||||
}
|
||||
|
||||
swap_focus(con1, con2, seat, focus);
|
||||
|
||||
if (stored_prev_name) {
|
||||
free(prev_workspace_name);
|
||||
prev_workspace_name = stored_prev_name;
|
||||
}
|
||||
|
||||
if (fs1) {
|
||||
container_set_fullscreen(con2, true);
|
||||
}
|
||||
if (fs2) {
|
||||
container_set_fullscreen(con1, true);
|
||||
}
|
||||
}
|
||||
|
||||
static bool test_con_id(struct sway_container *container, void *con_id) {
|
||||
return container->id == (size_t)con_id;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include <string.h>
|
||||
#include "sway/commands.h"
|
||||
#include "sway/config.h"
|
||||
#include "sway/tree/root.h"
|
||||
#include "sway/tree/view.h"
|
||||
#include "list.h"
|
||||
#include "log.h"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
#include "sway/tree/arrange.h"
|
||||
#include "sway/tree/container.h"
|
||||
#include "sway/tree/view.h"
|
||||
#include "sway/tree/layout.h"
|
||||
#include "util.h"
|
||||
|
||||
struct cmd_results *cmd_urgent(int argc, char **argv) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue