aboutsummaryrefslogtreecommitdiff
path: root/sway/tree
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-05-05 19:43:12 +0100
committeremersion <contact@emersion.fr>2018-05-10 23:03:50 +0100
commitbec80f15519f686c64485685289155568c9bfa9e (patch)
treece19c596754ac2413bddea4a6cd395882682567f /sway/tree
parent98f7ee8f59fb3242b4689f54d30d78a478d89b1b (diff)
Damage borders when damaging view
Diffstat (limited to 'sway/tree')
-rw-r--r--sway/tree/container.c11
-rw-r--r--sway/tree/view.c26
2 files changed, 21 insertions, 16 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 38db29c2..cc3bde0a 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -547,12 +547,13 @@ bool container_has_child(struct sway_container *con,
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);
+void container_damage_whole(struct sway_container *container) {
+ 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_container(cont->sway_output, container);
+ }
}
- output_damage_whole_container(output->sway_output, con);
}
static void update_title_texture(struct sway_container *con,
diff --git a/sway/tree/view.c b/sway/tree/view.c
index fe944466..afd7eade 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -199,11 +199,11 @@ void view_close(struct sway_view *view) {
}
}
-void view_damage(struct sway_view *view, bool whole) {
+void view_damage_from(struct sway_view *view) {
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_view(cont->sway_output, view, whole);
+ output_damage_from_view(cont->sway_output, view);
}
}
}
@@ -333,7 +333,7 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) {
arrange_children_of(cont->parent);
input_manager_set_focus(input_manager, cont);
- view_damage(view, true);
+ container_damage_whole(cont);
view_handle_container_reparent(&view->container_reparent, NULL);
view_execute_criteria(view);
@@ -351,7 +351,7 @@ void view_unmap(struct sway_view *view) {
ws->sway_workspace->fullscreen = NULL;
}
- view_damage(view, true);
+ container_damage_whole(view->swayc);
wl_list_remove(&view->surface_new_subsurface.link);
wl_list_remove(&view->container_reparent.link);
@@ -380,10 +380,10 @@ void view_update_position(struct sway_view *view, double ox, double oy) {
// TODO: Only allow this if the view is floating (this function will only be
// called in response to wayland clients wanting to reposition themselves).
- view_damage(view, true);
+ container_damage_whole(view->swayc);
view->swayc->x = ox;
view->swayc->y = oy;
- view_damage(view, true);
+ container_damage_whole(view->swayc);
}
void view_update_size(struct sway_view *view, int width, int height) {
@@ -391,11 +391,11 @@ void view_update_size(struct sway_view *view, int width, int height) {
return;
}
- view_damage(view, true);
+ container_damage_whole(view->swayc);
// Should we update the swayc width/height here too?
view->width = width;
view->height = height;
- view_damage(view, true);
+ container_damage_whole(view->swayc);
}
@@ -414,7 +414,7 @@ static void view_child_handle_surface_commit(struct wl_listener *listener,
struct sway_view_child *child =
wl_container_of(listener, child, surface_commit);
// TODO: only accumulate damage from the child
- view_damage(child->view, false);
+ view_damage_from(child->view);
}
static void view_child_handle_surface_new_subsurface(
@@ -476,12 +476,16 @@ void view_child_init(struct sway_view_child *child,
view_init_subsurfaces(child->view, surface);
// TODO: only damage the whole child
- view_damage(child->view, true);
+ if (child->view->swayc) {
+ container_damage_whole(child->view->swayc);
+ }
}
void view_child_destroy(struct sway_view_child *child) {
// TODO: only damage the whole child
- view_damage(child->view, true);
+ if (child->view->swayc) {
+ container_damage_whole(child->view->swayc);
+ }
wl_list_remove(&child->surface_commit.link);
wl_list_remove(&child->surface_destroy.link);