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 @@ | |||
8 | #include "log.h" | 8 | #include "log.h" |
9 | #include "sway/desktop.h" | 9 | #include "sway/desktop.h" |
10 | #include "sway/desktop/transaction.h" | 10 | #include "sway/desktop/transaction.h" |
11 | #include "sway/input/cursor.h" | ||
11 | #include "sway/input/input-manager.h" | 12 | #include "sway/input/input-manager.h" |
12 | #include "sway/input/seat.h" | 13 | #include "sway/input/seat.h" |
13 | #include "sway/output.h" | 14 | #include "sway/output.h" |
@@ -171,6 +172,11 @@ static uint32_t get_int_prop(struct sway_view *view, enum sway_view_prop prop) { | |||
171 | switch (prop) { | 172 | switch (prop) { |
172 | case VIEW_PROP_X11_WINDOW_ID: | 173 | case VIEW_PROP_X11_WINDOW_ID: |
173 | return view->wlr_xwayland_surface->window_id; | 174 | return view->wlr_xwayland_surface->window_id; |
175 | case VIEW_PROP_X11_PARENT_ID: | ||
176 | if (view->wlr_xwayland_surface->parent) { | ||
177 | return view->wlr_xwayland_surface->parent->window_id; | ||
178 | } | ||
179 | return 0; | ||
174 | case VIEW_PROP_WINDOW_TYPE: | 180 | case VIEW_PROP_WINDOW_TYPE: |
175 | return *view->wlr_xwayland_surface->window_type; | 181 | return *view->wlr_xwayland_surface->window_type; |
176 | default: | 182 | default: |
@@ -385,6 +391,11 @@ static void handle_unmap(struct wl_listener *listener, void *data) { | |||
385 | wl_list_remove(&xwayland_view->commit.link); | 391 | wl_list_remove(&xwayland_view->commit.link); |
386 | } | 392 | } |
387 | 393 | ||
394 | static void do_rebase(void *data) { | ||
395 | struct sway_cursor *cursor = data; | ||
396 | cursor_rebase(cursor); | ||
397 | } | ||
398 | |||
388 | static void handle_map(struct wl_listener *listener, void *data) { | 399 | static void handle_map(struct wl_listener *listener, void *data) { |
389 | struct sway_xwayland_view *xwayland_view = | 400 | struct sway_xwayland_view *xwayland_view = |
390 | wl_container_of(listener, xwayland_view, map); | 401 | wl_container_of(listener, xwayland_view, map); |
@@ -411,7 +422,8 @@ static void handle_map(struct wl_listener *listener, void *data) { | |||
411 | // Put it back into the tree | 422 | // Put it back into the tree |
412 | view_map(view, xsurface->surface, xsurface->fullscreen, false); | 423 | view_map(view, xsurface->surface, xsurface->fullscreen, false); |
413 | 424 | ||
414 | transaction_commit_dirty(); | 425 | struct sway_seat *seat = input_manager_current_seat(); |
426 | transaction_commit_dirty_with_callback(do_rebase, seat->cursor); | ||
415 | } | 427 | } |
416 | 428 | ||
417 | static void handle_request_configure(struct wl_listener *listener, void *data) { | 429 | static void handle_request_configure(struct wl_listener *listener, void *data) { |