From 1c91d0c10ffbed14cafaba79276a14f55172b7eb Mon Sep 17 00:00:00 2001 From: emersion Date: Thu, 5 Apr 2018 17:37:24 -0400 Subject: Add damage tracking for xwayland unmanaged surfaces --- include/sway/output.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include/sway/output.h') diff --git a/include/sway/output.h b/include/sway/output.h index 98d0f83f..9964a484 100644 --- a/include/sway/output.h +++ b/include/sway/output.h @@ -37,6 +37,9 @@ void output_damage_whole(struct sway_output *output); void output_damage_whole_view(struct sway_output *output, struct sway_view *view); +void output_damage_whole_surface(struct sway_output *output, + struct wlr_surface *surface, double ox, double oy); + struct sway_container *output_by_name(const char *name); #endif -- cgit v1.2.3 From 076bedb85eface4a6c41a0e99059c89186bdb275 Mon Sep 17 00:00:00 2001 From: emersion Date: Thu, 5 Apr 2018 18:31:19 -0400 Subject: Add container_damage_whole --- include/sway/output.h | 4 ++-- include/sway/tree/container.h | 8 +++++--- sway/desktop/desktop.c | 5 +++-- sway/desktop/output.c | 4 ++-- sway/tree/container.c | 13 +++++++++++-- 5 files changed, 23 insertions(+), 11 deletions(-) (limited to 'include/sway/output.h') diff --git a/include/sway/output.h b/include/sway/output.h index 9964a484..8945dde4 100644 --- a/include/sway/output.h +++ b/include/sway/output.h @@ -37,8 +37,8 @@ void output_damage_whole(struct sway_output *output); void output_damage_whole_view(struct sway_output *output, struct sway_view *view); -void output_damage_whole_surface(struct sway_output *output, - struct wlr_surface *surface, double ox, double oy); +void output_damage_whole_rect(struct sway_output *output, double ox, double oy, + int width, int height); struct sway_container *output_by_name(const char *name); diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index 3a3a9429..7acb607b 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -97,8 +97,7 @@ struct sway_container *container_create(enum sway_container_type type); const char *container_type_to_str(enum sway_container_type type); -struct sway_container *output_create( - struct sway_output *sway_output); +struct sway_container *output_create(struct sway_output *sway_output); /** * Create a new container container. A container container can be a a child of @@ -116,7 +115,8 @@ struct sway_container *output_create(struct sway_output *sway_output); * Create a new workspace container. Workspaces are children of an output * container and are ordered alphabetically by name. */ -struct sway_container *workspace_create(struct sway_container *output, const char *name); +struct sway_container *workspace_create(struct sway_container *output, + const char *name); /* * Create a new view container. A view can be a child of a workspace container @@ -182,4 +182,6 @@ bool container_has_child(struct sway_container *con, void container_create_notify(struct sway_container *container); +void container_damage_whole(struct sway_container *container); + #endif diff --git a/sway/desktop/desktop.c b/sway/desktop/desktop.c index 78a2d49f..c23d988c 100644 --- a/sway/desktop/desktop.c +++ b/sway/desktop/desktop.c @@ -7,8 +7,9 @@ void desktop_damage_whole_surface(struct wlr_surface *surface, double lx, for (int i = 0; i < root_container.children->length; ++i) { struct sway_container *cont = root_container.children->items[i]; if (cont->type == C_OUTPUT) { - output_damage_whole_surface(cont->sway_output, surface, - lx - cont->x, ly - cont->y); + output_damage_whole_rect(cont->sway_output, + lx - cont->x, ly - cont->y, + surface->current->width, surface->current->height); } } } diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 0ae5e782..09244460 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -341,8 +341,8 @@ void output_damage_whole_view(struct sway_output *output, output_damage_whole(output); } -void output_damage_whole_surface(struct sway_output *output, - struct wlr_surface *surface, double ox, double oy) { +void output_damage_whole_rect(struct sway_output *output, + double ox, double oy, int width, int height) { // TODO output_damage_whole(output); } diff --git a/sway/tree/container.c b/sway/tree/container.c index 8fc9e3e8..1450db6d 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -512,9 +512,18 @@ static bool find_child_func(struct sway_container *con, void *data) { bool container_has_child(struct sway_container *con, struct sway_container *child) { - if (con == NULL || con->type == C_VIEW || - con->children->length == 0) { + if (con == NULL || con->type == C_VIEW || con->children->length == 0) { return false; } return container_find(con, find_child_func, child); } + +void container_damage_whole(struct sway_container *con) { + struct sway_container *output = con; + if (output->type != C_OUTPUT) { + output = container_parent(output, C_OUTPUT); + } + + output_damage_whole_rect(output->sway_output, con->x, con->y, con->width, + con->height); +} -- cgit v1.2.3 From d65d001aa55c71f67a35c8ce78d3cb3f7f5fd65e Mon Sep 17 00:00:00 2001 From: emersion Date: Thu, 5 Apr 2018 18:38:50 -0400 Subject: Fix desktop_damage_whole_surface --- include/sway/output.h | 7 +++++-- sway/desktop/desktop.c | 5 ++--- sway/desktop/output.c | 10 ++++++++-- sway/tree/container.c | 4 +--- 4 files changed, 16 insertions(+), 10 deletions(-) (limited to 'include/sway/output.h') diff --git a/include/sway/output.h b/include/sway/output.h index 8945dde4..4bffa2b7 100644 --- a/include/sway/output.h +++ b/include/sway/output.h @@ -34,11 +34,14 @@ struct sway_output { void output_damage_whole(struct sway_output *output); +void output_damage_whole_surface(struct sway_output *output, + double ox, double oy, struct wlr_surface *surface); + void output_damage_whole_view(struct sway_output *output, struct sway_view *view); -void output_damage_whole_rect(struct sway_output *output, double ox, double oy, - int width, int height); +void output_damage_whole_container(struct sway_output *output, + struct sway_container *con); struct sway_container *output_by_name(const char *name); diff --git a/sway/desktop/desktop.c b/sway/desktop/desktop.c index c23d988c..3a13191f 100644 --- a/sway/desktop/desktop.c +++ b/sway/desktop/desktop.c @@ -7,9 +7,8 @@ void desktop_damage_whole_surface(struct wlr_surface *surface, double lx, for (int i = 0; i < root_container.children->length; ++i) { struct sway_container *cont = root_container.children->items[i]; if (cont->type == C_OUTPUT) { - output_damage_whole_rect(cont->sway_output, - lx - cont->x, ly - cont->y, - surface->current->width, surface->current->height); + output_damage_whole_surface(cont->sway_output, + lx - cont->x, ly - cont->y, surface); } } } diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 09244460..a7f40ef8 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -335,14 +335,20 @@ void output_damage_whole(struct sway_output *output) { wlr_output_damage_add_whole(output->damage); } +void output_damage_whole_surface(struct sway_output *output, + double ox, double oy, struct wlr_surface *surface) { + // TODO + output_damage_whole(output); +} + void output_damage_whole_view(struct sway_output *output, struct sway_view *view) { // TODO output_damage_whole(output); } -void output_damage_whole_rect(struct sway_output *output, - double ox, double oy, int width, int height) { +void output_damage_whole_container(struct sway_output *output, + struct sway_container *con) { // TODO output_damage_whole(output); } diff --git a/sway/tree/container.c b/sway/tree/container.c index 1450db6d..404d413f 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -523,7 +523,5 @@ void container_damage_whole(struct sway_container *con) { if (output->type != C_OUTPUT) { output = container_parent(output, C_OUTPUT); } - - output_damage_whole_rect(output->sway_output, con->x, con->y, con->width, - con->height); + output_damage_whole_container(output->sway_output, con); } -- cgit v1.2.3