Track the focused output of seats
This commit is contained in:
		
							
								
								
									
										16
									
								
								src/seat.zig
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								src/seat.zig
									
									
									
									
									
								
							@ -2,9 +2,10 @@ const std = @import("std");
 | 
			
		||||
const c = @import("c.zig");
 | 
			
		||||
 | 
			
		||||
const Cursor = @import("cursor.zig").Cursor;
 | 
			
		||||
const Log = @import("log.zig").Log;
 | 
			
		||||
const InputManager = @import("input_manager.zig").InputManager;
 | 
			
		||||
const Keyboard = @import("keyboard.zig").Keyboard;
 | 
			
		||||
const Log = @import("log.zig").Log;
 | 
			
		||||
const Output = @import("output.zig").Output;
 | 
			
		||||
const View = @import("view.zig").View;
 | 
			
		||||
const ViewStack = @import("view_stack.zig").ViewStack;
 | 
			
		||||
 | 
			
		||||
@ -20,6 +21,9 @@ pub const Seat = struct {
 | 
			
		||||
    /// Mulitple keyboards are handled separately
 | 
			
		||||
    keyboards: std.TailQueue(Keyboard),
 | 
			
		||||
 | 
			
		||||
    /// Currently focused output, may be the noop output if no
 | 
			
		||||
    focused_output: *Output,
 | 
			
		||||
 | 
			
		||||
    /// Currently focused view if any
 | 
			
		||||
    focused_view: ?*View,
 | 
			
		||||
 | 
			
		||||
@ -39,6 +43,8 @@ pub const Seat = struct {
 | 
			
		||||
 | 
			
		||||
        self.keyboards = std.TailQueue(Keyboard).init();
 | 
			
		||||
 | 
			
		||||
        self.focused_output = &self.input_manager.server.root.noop_output;
 | 
			
		||||
 | 
			
		||||
        self.focused_view = null;
 | 
			
		||||
 | 
			
		||||
        self.focus_stack.init();
 | 
			
		||||
@ -54,11 +60,15 @@ pub const Seat = struct {
 | 
			
		||||
        var view = _view;
 | 
			
		||||
 | 
			
		||||
        // If view is null or not currently visible
 | 
			
		||||
        if (if (view) |v| v.current_tags & v.output.current_focused_tags == 0 else true) {
 | 
			
		||||
        if (if (view) |v|
 | 
			
		||||
            v.output != self.focused_output or
 | 
			
		||||
                v.current_tags & self.focused_output.current_focused_tags == 0
 | 
			
		||||
        else
 | 
			
		||||
            true) {
 | 
			
		||||
            // Set view to the first currently visible view in the focus stack if any
 | 
			
		||||
            view = if (ViewStack(*View).iterator(
 | 
			
		||||
                self.focus_stack.first,
 | 
			
		||||
                self.input_manager.server.root.focusedOutput().current_focused_tags,
 | 
			
		||||
                self.focused_output.current_focused_tags,
 | 
			
		||||
            ).next()) |node| node.view else null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user