diff options
Diffstat (limited to 'sway/desktop/xwayland.c')
-rw-r--r-- | sway/desktop/xwayland.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c index 5305ce12..95275937 100644 --- a/sway/desktop/xwayland.c +++ b/sway/desktop/xwayland.c @@ -8,6 +8,7 @@ #include "log.h" #include "sway/desktop.h" #include "sway/desktop/transaction.h" +#include "sway/input/cursor.h" #include "sway/input/input-manager.h" #include "sway/input/seat.h" #include "sway/output.h" @@ -171,6 +172,11 @@ static uint32_t get_int_prop(struct sway_view *view, enum sway_view_prop prop) { switch (prop) { case VIEW_PROP_X11_WINDOW_ID: return view->wlr_xwayland_surface->window_id; + case VIEW_PROP_X11_PARENT_ID: + if (view->wlr_xwayland_surface->parent) { + return view->wlr_xwayland_surface->parent->window_id; + } + return 0; case VIEW_PROP_WINDOW_TYPE: return *view->wlr_xwayland_surface->window_type; default: @@ -385,6 +391,11 @@ static void handle_unmap(struct wl_listener *listener, void *data) { wl_list_remove(&xwayland_view->commit.link); } +static void do_rebase(void *data) { + struct sway_cursor *cursor = data; + cursor_rebase(cursor); +} + static void handle_map(struct wl_listener *listener, void *data) { struct sway_xwayland_view *xwayland_view = wl_container_of(listener, xwayland_view, map); @@ -411,7 +422,8 @@ static void handle_map(struct wl_listener *listener, void *data) { // Put it back into the tree view_map(view, xsurface->surface, xsurface->fullscreen, false); - transaction_commit_dirty(); + struct sway_seat *seat = input_manager_current_seat(); + transaction_commit_dirty_with_callback(do_rebase, seat->cursor); } static void handle_request_configure(struct wl_listener *listener, void *data) { |