aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar emersion <contact@emersion.fr>2018-04-05 18:31:19 -0400
committerLibravatar emersion <contact@emersion.fr>2018-04-05 18:31:19 -0400
commit076bedb85eface4a6c41a0e99059c89186bdb275 (patch)
tree9390c5c41be12daa0e5443416d7868a8f59ea569
parentAdd damage tracking for xwayland unmanaged surfaces (diff)
downloadsway-076bedb85eface4a6c41a0e99059c89186bdb275.tar.gz
sway-076bedb85eface4a6c41a0e99059c89186bdb275.tar.zst
sway-076bedb85eface4a6c41a0e99059c89186bdb275.zip
Add container_damage_whole
-rw-r--r--include/sway/output.h4
-rw-r--r--include/sway/tree/container.h8
-rw-r--r--sway/desktop/desktop.c5
-rw-r--r--sway/desktop/output.c4
-rw-r--r--sway/tree/container.c13
5 files changed, 23 insertions, 11 deletions
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);
37void output_damage_whole_view(struct sway_output *output, 37void output_damage_whole_view(struct sway_output *output,
38 struct sway_view *view); 38 struct sway_view *view);
39 39
40void output_damage_whole_surface(struct sway_output *output, 40void output_damage_whole_rect(struct sway_output *output, double ox, double oy,
41 struct wlr_surface *surface, double ox, double oy); 41 int width, int height);
42 42
43struct sway_container *output_by_name(const char *name); 43struct sway_container *output_by_name(const char *name);
44 44
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);
97 97
98const char *container_type_to_str(enum sway_container_type type); 98const char *container_type_to_str(enum sway_container_type type);
99 99
100struct sway_container *output_create( 100struct sway_container *output_create(struct sway_output *sway_output);
101 struct sway_output *sway_output);
102 101
103/** 102/**
104 * Create a new container container. A container container can be a a child of 103 * 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);
116 * Create a new workspace container. Workspaces are children of an output 115 * Create a new workspace container. Workspaces are children of an output
117 * container and are ordered alphabetically by name. 116 * container and are ordered alphabetically by name.
118 */ 117 */
119struct sway_container *workspace_create(struct sway_container *output, const char *name); 118struct sway_container *workspace_create(struct sway_container *output,
119 const char *name);
120 120
121/* 121/*
122 * Create a new view container. A view can be a child of a workspace container 122 * 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,
182 182
183void container_create_notify(struct sway_container *container); 183void container_create_notify(struct sway_container *container);
184 184
185void container_damage_whole(struct sway_container *container);
186
185#endif 187#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,
7 for (int i = 0; i < root_container.children->length; ++i) { 7 for (int i = 0; i < root_container.children->length; ++i) {
8 struct sway_container *cont = root_container.children->items[i]; 8 struct sway_container *cont = root_container.children->items[i];
9 if (cont->type == C_OUTPUT) { 9 if (cont->type == C_OUTPUT) {
10 output_damage_whole_surface(cont->sway_output, surface, 10 output_damage_whole_rect(cont->sway_output,
11 lx - cont->x, ly - cont->y); 11 lx - cont->x, ly - cont->y,
12 surface->current->width, surface->current->height);
12 } 13 }
13 } 14 }
14} 15}
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,
341 output_damage_whole(output); 341 output_damage_whole(output);
342} 342}
343 343
344void output_damage_whole_surface(struct sway_output *output, 344void output_damage_whole_rect(struct sway_output *output,
345 struct wlr_surface *surface, double ox, double oy) { 345 double ox, double oy, int width, int height) {
346 // TODO 346 // TODO
347 output_damage_whole(output); 347 output_damage_whole(output);
348} 348}
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) {
512 512
513bool container_has_child(struct sway_container *con, 513bool container_has_child(struct sway_container *con,
514 struct sway_container *child) { 514 struct sway_container *child) {
515 if (con == NULL || con->type == C_VIEW || 515 if (con == NULL || con->type == C_VIEW || con->children->length == 0) {
516 con->children->length == 0) {
517 return false; 516 return false;
518 } 517 }
519 return container_find(con, find_child_func, child); 518 return container_find(con, find_child_func, child);
520} 519}
520
521void container_damage_whole(struct sway_container *con) {
522 struct sway_container *output = con;
523 if (output->type != C_OUTPUT) {
524 output = container_parent(output, C_OUTPUT);
525 }
526
527 output_damage_whole_rect(output->sway_output, con->x, con->y, con->width,
528 con->height);
529}