aboutsummaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
authorRonan Pigott <ronan@rjp.ie>2022-11-30 12:02:10 -0700
committerRonan Pigott <ronan@rjp.ie>2023-02-05 00:53:47 -0700
commit842609da6432c054c19c8d10f1660085653daa64 (patch)
tree679a42fc407a1e11ef1f29daa755489202fcf54e /sway
parent0780d3a465a4aa4157c5c78edf163e104c6d2326 (diff)
view: make request_activate take a seat
This way we can move focus on the same seat an activation token originates from.
Diffstat (limited to 'sway')
-rw-r--r--sway/desktop/xwayland.c2
-rw-r--r--sway/tree/view.c6
-rw-r--r--sway/xdg_activation_v1.c7
3 files changed, 11 insertions, 4 deletions
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c
index e15a3341..9c29f66b 100644
--- a/sway/desktop/xwayland.c
+++ b/sway/desktop/xwayland.c
@@ -630,7 +630,7 @@ static void handle_request_activate(struct wl_listener *listener, void *data) {
if (!xsurface->mapped) {
return;
}
- view_request_activate(view);
+ view_request_activate(view, NULL);
transaction_commit_dirty();
}
diff --git a/sway/tree/view.c b/sway/tree/view.c
index ec0ad4af..ba3ef489 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -366,12 +366,14 @@ void view_set_activated(struct sway_view *view, bool activated) {
}
}
-void view_request_activate(struct sway_view *view) {
+void view_request_activate(struct sway_view *view, struct sway_seat *seat) {
struct sway_workspace *ws = view->container->pending.workspace;
if (!ws) { // hidden scratchpad container
return;
}
- struct sway_seat *seat = input_manager_current_seat();
+ if (!seat) {
+ seat = input_manager_current_seat();
+ }
switch (config->focus_on_window_activation) {
case FOWA_SMART:
diff --git a/sway/xdg_activation_v1.c b/sway/xdg_activation_v1.c
index cc3dcec0..c20e42c1 100644
--- a/sway/xdg_activation_v1.c
+++ b/sway/xdg_activation_v1.c
@@ -31,5 +31,10 @@ void xdg_activation_v1_handle_request_activate(struct wl_listener *listener,
return;
}
- view_request_activate(view);
+ struct wlr_seat *wlr_seat = event->token->seat;
+ // The requesting seat may have been destroyed.
+ if (wlr_seat) {
+ struct sway_seat *seat = wlr_seat->data;
+ view_request_activate(view, seat);
+ }
}