diff options
author | Jeffrey Stedfast <jeff@xamarin.com> | 2011-11-30 00:22:53 +0400 |
---|---|---|
committer | Jeffrey Stedfast <jeff@xamarin.com> | 2011-11-30 00:22:53 +0400 |
commit | 6d9d9ee41bfc85afee8aef075dc8a3637c0ba5c2 (patch) | |
tree | 33d80402532b3f49aa59d2b70ed9beb1521e4c47 | |
parent | 0650113182427275a362a39b11a5b81575e523fd (diff) |
[MacPlatform] Fixed GetUsableMonitorGeometry for vertical screen layouts.
Fixes bug #2064
-rw-r--r-- | main/src/addins/MacPlatform/MacPlatform.cs | 13 | ||||
-rw-r--r-- | main/src/core/Mono.Texteditor/Mono.TextEditor/GtkWorkarounds.cs | 16 |
2 files changed, 14 insertions, 15 deletions
diff --git a/main/src/addins/MacPlatform/MacPlatform.cs b/main/src/addins/MacPlatform/MacPlatform.cs index d10679e6f6..21e8ee50db 100644 --- a/main/src/addins/MacPlatform/MacPlatform.cs +++ b/main/src/addins/MacPlatform/MacPlatform.cs @@ -460,17 +460,16 @@ end tell", directory.ToString ().Replace ("\"", "\\\""))); public override Gdk.Rectangle GetUsableMonitorGeometry (Gdk.Screen screen, int monitor_id) { - Gdk.Rectangle geometry = screen.GetMonitorGeometry (0); + Gdk.Rectangle ygeometry = screen.GetMonitorGeometry (monitor_id); + Gdk.Rectangle xgeometry = screen.GetMonitorGeometry (0); NSScreen monitor = NSScreen.Screens[monitor_id]; RectangleF visible = monitor.VisibleFrame; RectangleF frame = monitor.Frame; // Note: Frame and VisibleFrame rectangles are relative to monitor 0, but we need absolute // coordinates. - visible.X += geometry.X; - visible.Y += geometry.Y; - frame.X += geometry.X; - frame.Y += geometry.Y; + visible.X += xgeometry.X; + frame.X += xgeometry.X; // VisibleFrame.Y is the height of the Dock if it is at the bottom of the screen, so in order // to get the menu height, we just figure out the difference between the visibleFrame height @@ -485,10 +484,10 @@ end tell", directory.ToString ().Replace ("\"", "\\\""))); float menubarHeight = (frame.Height - visible.Height) - dockHeight; height = frame.Height - menubarHeight - dockHeight; - y = menubarHeight; + y = ygeometry.Y + menubarHeight; } else { height = frame.Height; - y = frame.Y; + y = ygeometry.Y; } // Takes care of the possibility of the Dock being positioned on the left or right edge of the screen. diff --git a/main/src/core/Mono.Texteditor/Mono.TextEditor/GtkWorkarounds.cs b/main/src/core/Mono.Texteditor/Mono.TextEditor/GtkWorkarounds.cs index 55d7a72702..f5f0704c3e 100644 --- a/main/src/core/Mono.Texteditor/Mono.TextEditor/GtkWorkarounds.cs +++ b/main/src/core/Mono.Texteditor/Mono.TextEditor/GtkWorkarounds.cs @@ -126,7 +126,8 @@ namespace Mono.TextEditor { IntPtr array = objc_msgSend_IntPtr (cls_NSScreen, sel_screens); IntPtr iter = objc_msgSend_IntPtr (array, sel_objectEnumerator); - Gdk.Rectangle geometry = screen.GetMonitorGeometry (0); + Gdk.Rectangle ygeometry = screen.GetMonitorGeometry (monitor); + Gdk.Rectangle xgeometry = screen.GetMonitorGeometry (0); RectangleF visible, frame; IntPtr scrn; int i = 0; @@ -142,10 +143,8 @@ namespace Mono.TextEditor // Note: Frame and VisibleFrame rectangles are relative to monitor 0, but we need absolute // coordinates. - visible.X += geometry.X; - visible.Y += geometry.Y; - frame.X += geometry.X; - frame.Y += geometry.Y; + visible.X += xgeometry.X; + frame.X += xgeometry.X; // VisibleFrame.Y is the height of the Dock if it is at the bottom of the screen, so in order // to get the menu height, we just figure out the difference between the visibleFrame height @@ -160,10 +159,10 @@ namespace Mono.TextEditor float menubarHeight = (frame.Height - visible.Height) - dockHeight; height = frame.Height - menubarHeight - dockHeight; - y = menubarHeight; + y = ygeometry.Y + menubarHeight; } else { height = frame.Height; - y = frame.Y; + y = ygeometry.Y; } // Takes care of the possibility of the Dock being positioned on the left or right edge of the screen. @@ -332,6 +331,7 @@ namespace Mono.TextEditor y -= y_over; } } + y = System.Math.Max (geometry.Top, System.Math.Min (y, geometry.Bottom - request.Height)); x = System.Math.Max (geometry.Left, System.Math.Min (x, geometry.Right - request.Width)); @@ -644,4 +644,4 @@ namespace Mono.TextEditor return other.key == key && other.mod == mod; } } -}
\ No newline at end of file +} |