mirror of
https://github.com/swaywm/sway.git
synced 2025-11-02 09:01:40 -05:00
Implement atomic layout updates for tree operations
This implements atomic layout updates for when views map, reparent or unmap.
This commit is contained in:
parent
1c89f32533
commit
38398e2d77
18 changed files with 545 additions and 389 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue