commit caed15af8210abffe2dff7c9e0fffc36ab0fbdb5
parent 59ba528bd930e55263cbee03eb9dfb6bdee98caa
Author: Ryan Dwyer <ryandwyer1@gmail.com>
Date: Sun, 7 Oct 2018 11:06:07 +1000
Handle subsurfaces in view_child_damage
Diffstat:
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/sway/tree/view.c b/sway/tree/view.c
@@ -630,6 +630,25 @@ void view_update_size(struct sway_view *view, int width, int height) {
container_set_geometry_from_floating_view(view->container);
}
+static void subsurface_get_root_coords(struct sway_view_child *child,
+ int *root_sx, int *root_sy) {
+ struct wlr_surface *surface = child->surface;
+ *root_sx = -child->view->geometry.x;
+ *root_sy = -child->view->geometry.y;
+
+ while (surface && wlr_surface_is_subsurface(surface)) {
+ struct wlr_subsurface *subsurface =
+ wlr_subsurface_from_wlr_surface(surface);
+ *root_sx += subsurface->current.x;
+ *root_sy += subsurface->current.y;
+ surface = subsurface->parent;
+ }
+}
+
+static const struct sway_view_child_impl subsurface_impl = {
+ .get_root_coords = subsurface_get_root_coords,
+};
+
static void view_subsurface_create(struct sway_view *view,
struct wlr_subsurface *subsurface) {
struct sway_view_child *child = calloc(1, sizeof(struct sway_view_child));
@@ -637,7 +656,7 @@ static void view_subsurface_create(struct sway_view *view,
wlr_log(WLR_ERROR, "Allocation failed");
return;
}
- view_child_init(child, NULL, view, subsurface->surface);
+ view_child_init(child, &subsurface_impl, view, subsurface->surface);
}
static void view_child_damage(struct sway_view_child *child, bool whole) {