aboutsummaryrefslogtreecommitdiff
path: root/include/sway/tree/container.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/sway/tree/container.h')
-rw-r--r--include/sway/tree/container.h146
1 files changed, 34 insertions, 112 deletions
diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h
index e4071cfe..6efecf7c 100644
--- a/include/sway/tree/container.h
+++ b/include/sway/tree/container.h
@@ -5,8 +5,7 @@
#include <wlr/types/wlr_box.h>
#include <wlr/types/wlr_surface.h>
#include "list.h"
-
-extern struct sway_container root_container;
+#include "sway/tree/node.h"
struct sway_view;
struct sway_seat;
@@ -17,23 +16,6 @@ struct sway_seat;
#define TITLEBAR_H_PADDING 3
#define TITLEBAR_V_PADDING 4
-/**
- * Different kinds of containers.
- *
- * This enum is in order. A container will never be inside of a container below
- * it on this list.
- */
-enum sway_container_type {
- C_ROOT,
- C_OUTPUT,
- C_WORKSPACE,
- C_CONTAINER,
- C_VIEW,
-
- // Keep last
- C_TYPES,
-};
-
enum sway_container_layout {
L_NONE,
L_HORIZ,
@@ -57,18 +39,14 @@ enum movement_direction;
enum wlr_direction;
struct sway_container_state {
- // Container/swayc properties
+ // Container properties
enum sway_container_layout layout;
- double swayc_x, swayc_y;
- double swayc_width, swayc_height;
+ double con_x, con_y;
+ double con_width, con_height;
bool is_fullscreen;
- bool has_gaps;
- double current_gaps;
- double gaps_inner;
- double gaps_outer;
-
+ struct sway_workspace *workspace;
struct sway_container *parent;
list_t *children;
@@ -86,35 +64,19 @@ struct sway_container_state {
bool border_left;
bool border_right;
bool using_csd;
-
- // Workspace properties
- struct sway_container *ws_fullscreen;
- list_t *ws_floating;
};
struct sway_container {
- union {
- // TODO: Encapsulate state for other node types as well like C_CONTAINER
- struct sway_root *sway_root;
- struct sway_output *sway_output;
- struct sway_workspace *sway_workspace;
- struct sway_view *sway_view;
- };
-
- /**
- * A unique ID to identify this container. Primarily used in the
- * get_tree JSON output.
- */
- size_t id;
+ struct sway_node node;
+ struct sway_view *view;
// The pending state is the main container properties, and the current state is in the below struct.
// This means most places of the code can refer to the main variables (pending state) and it'll just work.
struct sway_container_state current;
- char *name; // The view's title (unformatted)
+ char *title; // The view's title (unformatted)
char *formatted_title; // The title displayed in the title bar
- enum sway_container_type type;
enum sway_container_layout layout;
enum sway_container_layout prev_split_layout;
@@ -132,14 +94,13 @@ struct sway_container {
// The gaps currently applied to the container.
double current_gaps;
-
bool has_gaps;
double gaps_inner;
double gaps_outer;
- list_t *children;
-
- struct sway_container *parent;
+ struct sway_workspace *workspace; // NULL when hidden in the scratchpad
+ struct sway_container *parent; // NULL if container in root of workspace
+ list_t *children; // struct sway_container
// Outputs currently being intersected
list_t *outputs; // struct sway_output
@@ -157,42 +118,17 @@ struct sway_container {
struct wlr_texture *title_urgent;
size_t title_height;
- // The number of transactions which reference this container.
- size_t ntxnrefs;
-
- // If this container is a view and is waiting for the client to respond to a
- // configure then this will be populated, otherwise NULL.
- struct sway_transaction_instruction *instruction;
-
- bool destroying;
-
- // If true, indicates that the container has pending state that differs from
- // the current.
- bool dirty;
-
struct {
struct wl_signal destroy;
} events;
};
-struct sway_container *container_create(enum sway_container_type type);
-
-const char *container_type_to_str(enum sway_container_type type);
-
-/*
- * Create a new view container. A view can be a child of a workspace container
- * or a container container and are rendered in the order and structure of
- * how they are attached to the tree.
- */
-struct sway_container *container_view_create(
- struct sway_container *sibling, struct sway_view *sway_view);
+struct sway_container *container_create(struct sway_view *view);
void container_destroy(struct sway_container *con);
void container_begin_destroy(struct sway_container *con);
-struct sway_container *container_close(struct sway_container *container);
-
/**
* Search a container's descendants a container based on test criteria. Returns
* the first container that passes the test.
@@ -201,22 +137,16 @@ struct sway_container *container_find_child(struct sway_container *container,
bool (*test)(struct sway_container *view, void *data), void *data);
/**
- * Finds a parent container with the given struct sway_containerype.
- */
-struct sway_container *container_parent(struct sway_container *container,
- enum sway_container_type type);
-
-/**
* Find a container at the given coordinates. Returns the the surface and
* surface-local coordinates of the given layout coordinates if the container
* is a view and the view contains a surface at those coordinates.
*/
-struct sway_container *container_at(struct sway_container *workspace,
+struct sway_container *container_at(struct sway_workspace *workspace,
double lx, double ly, struct wlr_surface **surface,
double *sx, double *sy);
struct sway_container *tiling_container_at(
- struct sway_container *con, double lx, double ly,
+ struct sway_node *parent, double lx, double ly,
struct wlr_surface **surface, double *sx, double *sy);
void container_for_each_child(struct sway_container *container,
@@ -228,16 +158,11 @@ void container_for_each_child(struct sway_container *container,
bool container_has_ancestor(struct sway_container *container,
struct sway_container *ancestor);
-int container_count_descendants_of_type(struct sway_container *con,
- enum sway_container_type type);
-
-void container_create_notify(struct sway_container *container);
-
void container_update_textures_recursive(struct sway_container *con);
void container_damage_whole(struct sway_container *container);
-struct sway_container *container_reap_empty(struct sway_container *con);
+void container_reap_empty(struct sway_container *con);
struct sway_container *container_flatten(struct sway_container *container);
@@ -248,11 +173,10 @@ void container_update_title_textures(struct sway_container *container);
*/
void container_calculate_title_height(struct sway_container *container);
-/**
- * Notify a container that a tree modification has changed in its children,
- * so the container can update its tree representation.
- */
-void container_notify_subtree_changed(struct sway_container *container);
+size_t container_build_representation(enum sway_container_layout layout,
+ list_t *children, char *buffer);
+
+void container_update_representation(struct sway_container *container);
/**
* Return the height of a regular title bar.
@@ -288,8 +212,7 @@ void container_floating_translate(struct sway_container *con,
/**
* Choose an output for the floating container's new position.
*/
-struct sway_container *container_floating_find_output(
- struct sway_container *con);
+struct sway_output *container_floating_find_output(struct sway_container *con);
/**
* Move a floating container to a new layout-local position.
@@ -302,12 +225,6 @@ void container_floating_move_to(struct sway_container *con,
*/
void container_floating_move_to_center(struct sway_container *con);
-/**
- * Mark a container as dirty if it isn't already. Dirty containers will be
- * included in the next transaction then unmarked as dirty.
- */
-void container_set_dirty(struct sway_container *container);
-
bool container_has_urgent_child(struct sway_container *container);
/**
@@ -342,10 +259,18 @@ void container_remove_gaps(struct sway_container *container);
void container_add_gaps(struct sway_container *container);
+enum sway_container_layout container_parent_layout(struct sway_container *con);
+
+enum sway_container_layout container_current_parent_layout(
+ struct sway_container *con);
+
+list_t *container_get_siblings(const struct sway_container *container);
+
int container_sibling_index(const struct sway_container *child);
-void container_handle_fullscreen_reparent(struct sway_container *con,
- struct sway_container *old_parent);
+list_t *container_get_current_siblings(struct sway_container *container);
+
+void container_handle_fullscreen_reparent(struct sway_container *con);
void container_add_child(struct sway_container *parent,
struct sway_container *child);
@@ -353,19 +278,16 @@ void container_add_child(struct sway_container *parent,
void container_insert_child(struct sway_container *parent,
struct sway_container *child, int i);
-struct sway_container *container_add_sibling(struct sway_container *parent,
+void container_add_sibling(struct sway_container *parent,
struct sway_container *child);
-struct sway_container *container_remove_child(struct sway_container *child);
+void container_detach(struct sway_container *child);
-struct sway_container *container_replace_child(struct sway_container *child,
- struct sway_container *new_child);
+void container_replace(struct sway_container *container,
+ struct sway_container *replacement);
bool sway_dir_to_wlr(enum movement_direction dir, enum wlr_direction *out);
-enum sway_container_layout container_get_default_layout(
- struct sway_container *con);
-
struct sway_container *container_split(struct sway_container *child,
enum sway_container_layout layout);