diff --git a/js/ui/layout.js b/js/ui/layout.js index 3a240e0c3..0a27ef54d 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -830,86 +830,87 @@ const LayoutManager = new Lang.Class({ y = Math.round(y); w = Math.round(w); h = Math.round(h); - let rect = new Meta.Rectangle({ x: x, y: y, width: w, height: h}); - if (actorData.affectsInputRegion && - actorData.actor.get_paint_visibility() && - !this.uiGroup.get_skip_paint(actorData.actor)) - rects.push(rect); + if (actorData.affectsInputRegion) { + let rect = new Meta.Rectangle({ x: x, y: y, width: w, height: h}); - if (!actorData.affectsStruts) - continue; + if (actorData.actor.get_paint_visibility() && + !this.uiGroup.get_skip_paint(actorData.actor)) + rects.push(rect); + } - // Limit struts to the size of the screen - let x1 = Math.max(x, 0); - let x2 = Math.min(x + w, global.screen_width); - let y1 = Math.max(y, 0); - let y2 = Math.min(y + h, global.screen_height); + if (actorData.affectsStruts) { + // Limit struts to the size of the screen + let x1 = Math.max(x, 0); + let x2 = Math.min(x + w, global.screen_width); + let y1 = Math.max(y, 0); + let y2 = Math.min(y + h, global.screen_height); - // NetWM struts are not really powerful enought to handle - // a multi-monitor scenario, they only describe what happens - // around the outer sides of the full display region. However - // it can describe a partial region along each side, so - // we can support having the struts only affect the - // primary monitor. This should be enough as we only have - // chrome affecting the struts on the primary monitor so - // far. - // - // Metacity wants to know what side of the screen the - // strut is considered to be attached to. If the actor is - // only touching one edge, or is touching the entire - // border of the primary monitor, then it's obvious which - // side to call it. If it's in a corner, we pick a side - // arbitrarily. If it doesn't touch any edges, or it spans - // the width/height across the middle of the screen, then - // we don't create a strut for it at all. - let side; - let primary = this.primaryMonitor; - if (x1 <= primary.x && x2 >= primary.x + primary.width) { - if (y1 <= primary.y) + // NetWM struts are not really powerful enought to handle + // a multi-monitor scenario, they only describe what happens + // around the outer sides of the full display region. However + // it can describe a partial region along each side, so + // we can support having the struts only affect the + // primary monitor. This should be enough as we only have + // chrome affecting the struts on the primary monitor so + // far. + // + // Metacity wants to know what side of the screen the + // strut is considered to be attached to. If the actor is + // only touching one edge, or is touching the entire + // border of the primary monitor, then it's obvious which + // side to call it. If it's in a corner, we pick a side + // arbitrarily. If it doesn't touch any edges, or it spans + // the width/height across the middle of the screen, then + // we don't create a strut for it at all. + let side; + let primary = this.primaryMonitor; + if (x1 <= primary.x && x2 >= primary.x + primary.width) { + if (y1 <= primary.y) + side = Meta.Side.TOP; + else if (y2 >= primary.y + primary.height) + side = Meta.Side.BOTTOM; + else + continue; + } else if (y1 <= primary.y && y2 >= primary.y + primary.height) { + if (x1 <= 0) + side = Meta.Side.LEFT; + else if (x2 >= primary.x + primary.width) + side = Meta.Side.RIGHT; + else + continue; + } else if (x1 <= 0) + side = Meta.Side.LEFT; + else if (y1 <= 0) side = Meta.Side.TOP; - else if (y2 >= primary.y + primary.height) + else if (x2 >= global.screen_width) + side = Meta.Side.RIGHT; + else if (y2 >= global.screen_height) side = Meta.Side.BOTTOM; else continue; - } else if (y1 <= primary.y && y2 >= primary.y + primary.height) { - if (x1 <= 0) - side = Meta.Side.LEFT; - else if (x2 >= primary.x + primary.width) - side = Meta.Side.RIGHT; - else - continue; - } else if (x1 <= 0) - side = Meta.Side.LEFT; - else if (y1 <= 0) - side = Meta.Side.TOP; - else if (x2 >= global.screen_width) - side = Meta.Side.RIGHT; - else if (y2 >= global.screen_height) - side = Meta.Side.BOTTOM; - else - continue; - // Ensure that the strut rects goes all the way to the screen edge, - // as this really what mutter expects. - switch (side) { - case Meta.Side.TOP: - y1 = 0; - break; - case Meta.Side.BOTTOM: - y2 = global.screen_height; - break; - case Meta.Side.LEFT: - x1 = 0; - break; - case Meta.Side.RIGHT: - x2 = global.screen_width; - break; + // Ensure that the strut rects goes all the way to the screen edge, + // as this really what mutter expects. + switch (side) { + case Meta.Side.TOP: + y1 = 0; + break; + case Meta.Side.BOTTOM: + y2 = global.screen_height; + break; + case Meta.Side.LEFT: + x1 = 0; + break; + case Meta.Side.RIGHT: + x2 = global.screen_width; + break; + } + + let strutRect = new Meta.Rectangle({ x: x1, y: y1, width: x2 - x1, height: y2 - y1}); + let strut = new Meta.Strut({ rect: strutRect, side: side }); + struts.push(strut); } - - let strutRect = new Meta.Rectangle({ x: x1, y: y1, width: x2 - x1, height: y2 - y1}); - let strut = new Meta.Strut({ rect: strutRect, side: side }); - struts.push(strut); } global.set_stage_input_region(rects);