diff options
Diffstat (limited to 'rootston')
-rw-r--r-- | rootston/xwayland.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/rootston/xwayland.c b/rootston/xwayland.c index aaf55b37..685681d9 100644 --- a/rootston/xwayland.c +++ b/rootston/xwayland.c @@ -17,7 +17,25 @@ static void handle_destroy(struct wl_listener *listener, void *data) { free(roots_surface); } -static void x11_activate(struct roots_view *view, bool active) { +static void handle_configure(struct wl_listener *listener, void *data) { + struct roots_xwayland_surface *roots_surface = + wl_container_of(listener, roots_surface, destroy); + struct wlr_xwayland_surface_configure_event *event = data; + struct wlr_xwayland_surface *xwayland_surface = event->surface; + + xwayland_surface->x = event->x; + xwayland_surface->y = event->y; + xwayland_surface->width = event->width; + xwayland_surface->height = event->height; + + roots_surface->view->x = (double) event->x; + roots_surface->view->y = (double) event->y; + + wlr_xwayland_surface_configure(roots_surface->view->desktop->xwayland, + xwayland_surface); +} + +static void activate(struct roots_view *view, bool active) { wlr_xwayland_surface_activate(view->desktop->xwayland, view->xwayland_surface); } @@ -35,15 +53,20 @@ void handle_xwayland_surface(struct wl_listener *listener, void *data) { wl_list_init(&roots_surface->destroy.link); roots_surface->destroy.notify = handle_destroy; wl_signal_add(&surface->events.destroy, &roots_surface->destroy); + wl_list_init(&roots_surface->request_configure.link); + roots_surface->request_configure.notify = handle_configure; + wl_signal_add(&surface->events.request_configure, + &roots_surface->request_configure); struct roots_view *view = calloc(1, sizeof(struct roots_view)); view->type = ROOTS_XWAYLAND_VIEW; - view->x = view->y = 200; + view->x = (double) surface->x; + view->y = (double) surface->y; view->xwayland_surface = surface; view->roots_xwayland_surface = roots_surface; view->wlr_surface = surface->surface; view->desktop = desktop; - view->activate = x11_activate; + view->activate = activate; roots_surface->view = view; list_add(desktop->views, view); } |