Grab seats focused on the output for layer shell
This commit is contained in:
parent
5244618b01
commit
cd9d4ee395
2 changed files with 9 additions and 3 deletions
|
@ -252,8 +252,8 @@ pub const Output = struct {
|
|||
self.arrangeLayer(self.layers[layer], full_box, &usable_box, false);
|
||||
}
|
||||
|
||||
// If there is any layer surface in the top or overlay layers which requests
|
||||
// keyboard interactivity, give it focus.
|
||||
// Find the topmost layer surface in the top or overlay layers which
|
||||
// requests keyboard interactivity if any.
|
||||
const topmost_surface = outer: for (layer_idxs[0..2]) |layer| {
|
||||
// Iterate in reverse order since the last layer is rendered on top
|
||||
var it = self.layers[layer].last;
|
||||
|
@ -268,6 +268,12 @@ pub const Output = struct {
|
|||
var it = self.root.server.input_manager.seats.first;
|
||||
while (it) |node| : (it = node.next) {
|
||||
const seat = &node.data;
|
||||
|
||||
// Only grab focus of seats which have the output focused
|
||||
if (seat.focused_output != self) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (topmost_surface) |to_focus| {
|
||||
// If we found a surface that requires focus, grab the focus of all
|
||||
// seats.
|
||||
|
|
|
@ -155,7 +155,7 @@ pub const Seat = struct {
|
|||
// Focus the layer surface
|
||||
self.sendKeyboardEnter(layer_to_focus.wlr_layer_surface.surface);
|
||||
self.focused_layer = layer_to_focus;
|
||||
self.focused_output = layer_to_focus.output;
|
||||
std.debug.assert(self.focused_output == layer_to_focus.output);
|
||||
} else {
|
||||
// If there is a layer currently focused, unfocus it
|
||||
if (self.focused_layer != null) {
|
||||
|
|
Loading…
Reference in a new issue