diff options
Diffstat (limited to 'sway/tree/view.c')
| -rw-r--r-- | sway/tree/view.c | 33 | 
1 files changed, 31 insertions, 2 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c index 16d48cc9..9855c5e1 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -102,6 +102,15 @@ static void view_get_layout_box(struct sway_view *view, struct wlr_box *box) {  	box->height = view->height;  } +void view_for_each_surface(struct sway_view *view, +		wlr_surface_iterator_func_t iterator, void *user_data) { +	if (view->impl->for_each_surface) { +		view->impl->for_each_surface(view, iterator, user_data); +	} else { +		wlr_surface_for_each_surface(view->surface, iterator, user_data); +	} +} +  static void view_subsurface_create(struct sway_view *view,  	struct wlr_subsurface *subsurface); @@ -116,6 +125,18 @@ static void view_handle_surface_new_subsurface(struct wl_listener *listener,  	view_subsurface_create(view, subsurface);  } +static void surface_send_enter_iterator(struct wlr_surface *surface, +		int x, int y, void *data) { +	struct wlr_output *wlr_output = data; +	wlr_surface_send_enter(surface, wlr_output); +} + +static void surface_send_leave_iterator(struct wlr_surface *surface, +		int x, int y, void *data) { +	struct wlr_output *wlr_output = data; +	wlr_surface_send_leave(surface, wlr_output); +} +  static void view_handle_container_reparent(struct wl_listener *listener,  		void *data) {  	struct sway_view *view = @@ -137,11 +158,11 @@ static void view_handle_container_reparent(struct wl_listener *listener,  	}  	if (old_output != NULL) { -		wlr_surface_send_leave(view->surface, +		view_for_each_surface(view, surface_send_leave_iterator,  			old_output->sway_output->wlr_output);  	}  	if (new_output != NULL) { -		wlr_surface_send_enter(view->surface, +		view_for_each_surface(view, surface_send_enter_iterator,  			new_output->sway_output->wlr_output);  	}  } @@ -283,6 +304,14 @@ void view_child_init(struct sway_view_child *child,  	wl_signal_add(&view->events.unmap, &child->view_unmap);  	child->view_unmap.notify = view_child_handle_view_unmap; +	struct sway_container *output = child->view->swayc->parent; +	if (output != NULL) { +		if (output->type != C_OUTPUT) { +			output = container_parent(output, C_OUTPUT); +		} +		wlr_surface_send_enter(child->surface, output->sway_output->wlr_output); +	} +  	view_init_subsurfaces(child->view, surface);  	// TODO: only damage the whole child  | 
