seat: set focus before starting transactions
Focus was made double-buffered in96a91fd
. However, much of the code still behaved as if focus was separate from the transaction system. This commit completes the work started in96a91fd
and ensures that focus is applied consistently in a single transaction.
This commit is contained in:
@ -48,9 +48,14 @@ const Mode = union(enum) {
|
||||
fn enter(self: *Self, mode: @TagType(Mode), event: *c.wlr_event_pointer_button, view: *View) void {
|
||||
log.debug(.cursor, "enter {} mode", .{@tagName(mode)});
|
||||
|
||||
self.seat.focus(view);
|
||||
|
||||
switch (mode) {
|
||||
.passthrough => unreachable,
|
||||
.down => self.mode = .{ .down = view },
|
||||
.down => {
|
||||
self.mode = .{ .down = view };
|
||||
view.output.root.startTransaction();
|
||||
},
|
||||
.move, .resize => {
|
||||
const cur_box = &view.current.box;
|
||||
self.mode = switch (mode) {
|
||||
@ -366,8 +371,6 @@ fn handleButton(listener: ?*c.wl_listener, data: ?*c_void) callconv(.C) void {
|
||||
// If the target surface has a view, give that view keyboard focus and
|
||||
// perhaps enter move/resize mode.
|
||||
if (View.fromWlrSurface(wlr_surface)) |view| {
|
||||
self.seat.focus(view);
|
||||
|
||||
if (event.state == .WLR_BUTTON_PRESSED and self.pressed_count == 1) {
|
||||
// If the button is pressed and the pointer modifier is
|
||||
// active, enter cursor mode or close view and return.
|
||||
|
Reference in New Issue
Block a user