aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorRyan Dwyer <ryandwyer1@gmail.com>2018-06-23 16:24:11 +1000
committerRyan Dwyer <ryandwyer1@gmail.com>2018-06-23 16:24:11 +1000
commit38398e2d77d57dc06b67ec88a54091c897915602 (patch)
treec80935807865fd96ab7d037070287d4dfaba1863 /include
parent1c89f32533534f6e78c81c95578f40df45bb9016 (diff)
Implement atomic layout updates for tree operations
This implements atomic layout updates for when views map, reparent or unmap.
Diffstat (limited to 'include')
-rw-r--r--include/sway/desktop/transaction.h9
-rw-r--r--include/sway/server.h7
-rw-r--r--include/sway/tree/container.h16
-rw-r--r--include/sway/tree/view.h18
4 files changed, 37 insertions, 13 deletions
diff --git a/include/sway/desktop/transaction.h b/include/sway/desktop/transaction.h
index 5aff28e9..d6adc609 100644
--- a/include/sway/desktop/transaction.h
+++ b/include/sway/desktop/transaction.h
@@ -1,5 +1,6 @@
#ifndef _SWAY_TRANSACTION_H
#define _SWAY_TRANSACTION_H
+#include <wlr/render/wlr_texture.h>
#include "sway/tree/container.h"
/**
@@ -48,4 +49,12 @@ void transaction_commit(struct sway_transaction *transaction);
*/
void transaction_notify_view_ready(struct sway_view *view, uint32_t serial);
+/**
+ * Get the texture that should be rendered for a view.
+ *
+ * In most cases this will return the normal live texture for a view, but if the
+ * view is in a transaction then it'll return a saved texture.
+ */
+struct wlr_texture *transaction_get_texture(struct sway_view *view);
+
#endif
diff --git a/include/sway/server.h b/include/sway/server.h
index 65d96e7a..f5f88a5a 100644
--- a/include/sway/server.h
+++ b/include/sway/server.h
@@ -12,6 +12,7 @@
#include <wlr/render/wlr_renderer.h>
// TODO WLR: make Xwayland optional
#include <wlr/xwayland.h>
+#include "list.h"
struct sway_server {
struct wl_display *wl_display;
@@ -43,6 +44,12 @@ struct sway_server {
struct wlr_wl_shell *wl_shell;
struct wl_listener wl_shell_surface;
+
+ bool terminating;
+
+ // When a view is being destroyed and is waiting for a transaction to
+ // complete it will be stored here.
+ list_t *destroying_containers;
};
struct sway_server server;
diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h
index f4e978ea..7e78cbef 100644
--- a/include/sway/tree/container.h
+++ b/include/sway/tree/container.h
@@ -65,8 +65,8 @@ struct sway_container_state {
double gaps_inner;
double gaps_outer;
- //struct sway_container *parent;
- //list_t *children;
+ struct sway_container *parent;
+ list_t *children;
// View properties
double view_x, view_y;
@@ -79,6 +79,10 @@ struct sway_container_state {
bool border_bottom;
bool border_left;
bool border_right;
+
+ // Workspace properties
+ struct sway_view *ws_fullscreen;
+ struct sway_container *ws_floating;
};
struct sway_container {
@@ -128,8 +132,6 @@ struct sway_container {
struct sway_container *parent;
- list_t *marks; // list of char*
-
float alpha;
struct wlr_texture *title_focused;
@@ -138,6 +140,10 @@ struct sway_container {
struct wlr_texture *title_urgent;
size_t title_height;
+ list_t *instructions; // struct sway_transaction_instruction *
+
+ bool destroying;
+
struct {
struct wl_signal destroy;
// Raised after the tree updates, but before arrange_windows
@@ -181,6 +187,8 @@ struct sway_container *workspace_create(struct sway_container *output,
struct sway_container *container_view_create(
struct sway_container *sibling, struct sway_view *sway_view);
+void container_free(struct sway_container *cont);
+
struct sway_container *container_destroy(struct sway_container *container);
struct sway_container *container_close(struct sway_container *container);
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h
index fc4c8df9..5a615b43 100644
--- a/include/sway/tree/view.h
+++ b/include/sway/tree/view.h
@@ -37,7 +37,7 @@ struct sway_view_impl {
void (*for_each_surface)(struct sway_view *view,
wlr_surface_iterator_func_t iterator, void *user_data);
void (*close)(struct sway_view *view);
- void (*destroy)(struct sway_view *view);
+ void (*free)(struct sway_view *view);
};
struct sway_view {
@@ -68,15 +68,10 @@ struct sway_view {
bool border_left;
bool border_right;
+ bool destroying;
+
list_t *executed_criteria; // struct criteria *
list_t *marks; // char *
- list_t *instructions; // struct sway_transaction_instruction *
-
- // If saved_buffer is set, the main surface of the view will render this
- // buffer/texture instead of its own. This is used while waiting for
- // transactions to complete.
- struct wlr_buffer *saved_buffer;
- int saved_surface_width, saved_surface_height;
struct wlr_texture *marks_focused;
struct wlr_texture *marks_focused_inactive;
@@ -244,11 +239,16 @@ void view_for_each_surface(struct sway_view *view,
void view_init(struct sway_view *view, enum sway_view_type type,
const struct sway_view_impl *impl);
+void view_free(struct sway_view *view);
+
void view_destroy(struct sway_view *view);
void view_map(struct sway_view *view, struct wlr_surface *wlr_surface);
-void view_unmap(struct sway_view *view);
+/**
+ * Unmap the view and return the surviving parent (after reaping).
+ */
+struct sway_container *view_unmap(struct sway_view *view);
void view_update_position(struct sway_view *view, double lx, double ly);