diff --git a/SOURCES/0001-layout-Don-t-always-extend-struts-to-the-screen-edge.patch b/SOURCES/0001-layout-Don-t-always-extend-struts-to-the-screen-edge.patch new file mode 100644 index 0000000..0968310 --- /dev/null +++ b/SOURCES/0001-layout-Don-t-always-extend-struts-to-the-screen-edge.patch @@ -0,0 +1,66 @@ +From 58027e7dcc43290a5d0da167aec23ed46148e938 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Tue, 15 Apr 2014 17:24:07 +0200 +Subject: [PATCH] layout: Don't always extend struts to the screen edge + +NetWM struts are defined in terms of screen edges (rather than monitor +edges), which works poorly with vertical monitor layouts (as it renders +entire monitors unusable). Don't extend struts in those cases. + +https://bugzilla.gnome.org/show_bug.cgi?id=663690 +--- + js/ui/layout.js | 30 +++++++++++++++++++++++++----- + 1 file changed, 25 insertions(+), 5 deletions(-) + +diff --git a/js/ui/layout.js b/js/ui/layout.js +index 141eecc..3dcc858 100644 +--- a/js/ui/layout.js ++++ b/js/ui/layout.js +@@ -1006,19 +1006,39 @@ const LayoutManager = new Lang.Class({ + continue; + + // Ensure that the strut rects goes all the way to the screen edge, +- // as this really what mutter expects. ++ // as this really what mutter expects. However skip this step ++ // in cases where this would render an entire monitor unusable. + switch (side) { + case Meta.Side.TOP: +- y1 = 0; ++ let hasMonitorsAbove = this.monitors.some(Lang.bind(this, ++ function(mon) { ++ return this._isAboveOrBelowPrimary(mon) && ++ mon.y < primary.y; ++ })); ++ if (!hasMonitorsAbove) ++ y1 = 0; + break; + case Meta.Side.BOTTOM: +- y2 = global.screen_height; ++ if (this.primaryIndex == this.bottomIndex) ++ y2 = global.screen_height; + break; + case Meta.Side.LEFT: +- x1 = 0; ++ let hasMonitorsLeft = this.monitors.some(Lang.bind(this, ++ function(mon) { ++ return !this._isAboveOrBelowPrimary(mon) && ++ mon.x < primary.x; ++ })); ++ if (!hasMonitorsLeft) ++ x1 = 0; + break; + case Meta.Side.RIGHT: +- x2 = global.screen_width; ++ let hasMonitorsRight = this.monitors.some(Lang.bind(this, ++ function(mon) { ++ return !this._isAboveOrBelowPrimary(mon) && ++ mon.x > primary.x; ++ })); ++ if (!hasMonitorsRight) ++ x2 = global.screen_width; + break; + } + +-- +1.9.0 + diff --git a/SPECS/gnome-shell.spec b/SPECS/gnome-shell.spec index ecddbcb..1f0d8a6 100644 --- a/SPECS/gnome-shell.spec +++ b/SPECS/gnome-shell.spec @@ -1,6 +1,6 @@ Name: gnome-shell Version: 3.8.4 -Release: 31%{?dist} +Release: 32%{?dist} Summary: Window management and application launching for GNOME Group: User Interface/Desktops @@ -19,6 +19,7 @@ Patch4: gnome-shell-favourite-apps-empathy.patch Patch10: 0001-popupMenu-Fix-removing-the-active-menu-from-PopupMen.patch Patch11: 0001-catch-more-errors-on-extensions-enable-and-disable.patch +Patch12: 0001-layout-Don-t-always-extend-struts-to-the-screen-edge.patch Patch20: 0001-main-allow-session-mode-to-be-specified-in-the-envir.patch @@ -162,6 +163,7 @@ be used only by extensions.gnome.org. %patch10 -p1 -b .fix-popup-menu-manager-exception %patch11 -p1 -b .catch-extension-errors +%patch12 -p1 -b .improve-vertical-monitor-layouts %patch20 -p1 -b .main-allow-session-mode-to-be-specified-in-the-envir @@ -260,6 +262,10 @@ glib-compile-schemas --allow-any-name %{_datadir}/glib-2.0/schemas &> /dev/null %{_libdir}/mozilla/plugins/*.so %changelog +* Wed Apr 16 2014 Florian Müllner - 3.8.4-32 +- Improve vertical monitor layouts + Resolves: rhbz#1096186 + * Wed Mar 19 2014 Florian Müllner - 3.8.4-31 - Fix some more background memory leaks Resolves: rhbz#1027192