aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2020-07-02 10:59:16 +0200
committerTudor Brindus <me@tbrindus.ca>2020-07-02 17:11:05 -0400
commit1bfbf262cc501db7bd94f651ea16aa4af607f548 (patch)
tree66e1cf7554d7f1c22c9bd50aa38b8909dbf660a1
parent92891fb1edef5136ae4eb35fec5b8523f031be81 (diff)
seat: fix segfault in sway_input_method_relay_set_focus
sway_input_method_relay_set_focus was called before sway_input_method_relay_init. Closes: https://github.com/swaywm/sway/issues/5503
-rw-r--r--sway/input/seat.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c
index a54bc2e7..1e987360 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -572,14 +572,6 @@ struct sway_seat *seat_create(const char *seat_name) {
seat->deferred_bindings = create_list();
- if (!wl_list_empty(&server.input->seats)) {
- // Since this is not the first seat, attempt to set initial focus
- struct sway_seat *current_seat = input_manager_current_seat();
- struct sway_node *current_focus =
- seat_get_focus_inactive(current_seat, &root->node);
- seat_set_focus(seat, current_focus);
- }
-
wl_signal_add(&root->events.new_node, &seat->new_node);
seat->new_node.notify = handle_new_node;
@@ -604,8 +596,17 @@ struct sway_seat *seat_create(const char *seat_name) {
sway_input_method_relay_init(seat, &seat->im_relay);
+ bool first = wl_list_empty(&server.input->seats);
wl_list_insert(&server.input->seats, &seat->link);
+ if (!first) {
+ // Since this is not the first seat, attempt to set initial focus
+ struct sway_seat *current_seat = input_manager_current_seat();
+ struct sway_node *current_focus =
+ seat_get_focus_inactive(current_seat, &root->node);
+ seat_set_focus(seat, current_focus);
+ }
+
seatop_begin_default(seat);
return seat;