seat: set focus before starting transactions

Focus was made double-buffered in 96a91fd. However, much of the code
still behaved as if focus was separate from the transaction system.
This commit completes the work started in 96a91fd and ensures that
focus is applied consistently in a single transaction.
This commit is contained in:
Isaac Freund
2020-08-12 11:07:29 +02:00
parent bd99428766
commit 7a6ac8eb6e
9 changed files with 36 additions and 29 deletions

View File

@ -53,6 +53,7 @@ pub fn focusView(
// Focus the next visible node if there is one
if (it.next()) |node| {
seat.focus(&node.view);
output.root.startTransaction();
return;
}
}
@ -65,4 +66,5 @@ pub fn focusView(
};
seat.focus(if (it.next()) |node| &node.view else null);
output.root.startTransaction();
}

View File

@ -31,6 +31,7 @@ pub fn setFocusedTags(
if (seat.focused_output.pending.tags != tags) {
seat.focused_output.pending.tags = tags;
seat.focused_output.arrangeViews();
seat.focus(null);
seat.focused_output.root.startTransaction();
}
}
@ -44,8 +45,10 @@ pub fn setViewTags(
) Error!void {
const tags = try parseTags(allocator, args, out);
if (seat.focused == .view) {
seat.focused.view.pending.tags = tags;
seat.focused.view.applyPending();
const view = seat.focused.view;
view.pending.tags = tags;
seat.focus(null);
view.applyPending();
}
}
@ -62,6 +65,7 @@ pub fn toggleFocusedTags(
if (new_focused_tags != 0) {
output.pending.tags = new_focused_tags;
output.arrangeViews();
seat.focus(null);
output.root.startTransaction();
}
}
@ -75,10 +79,12 @@ pub fn toggleViewTags(
) Error!void {
const tags = try parseTags(allocator, args, out);
if (seat.focused == .view) {
const new_tags = seat.focused.view.current.tags ^ tags;
const new_tags = seat.focused.view.pending.tags ^ tags;
if (new_tags != 0) {
seat.focused.view.pending.tags = new_tags;
seat.focused.view.applyPending();
const view = seat.focused.view;
view.pending.tags = new_tags;
seat.focus(null);
view.applyPending();
}
}
}