diff options
author | Lluis Sanchez <lluis@novell.com> | 2010-04-20 13:21:12 +0400 |
---|---|---|
committer | Lluis Sanchez <lluis@novell.com> | 2010-04-20 13:21:12 +0400 |
commit | 14139a1ea78f2734cacdabe15d0db6b2e261abbc (patch) | |
tree | a048fb7816e4514139200fc6e797c9e0d8684c97 /main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking | |
parent | 3abd1409a9629742ef6feb78e209668e7b6bfe9e (diff) |
* MonoDevelop.Components.Docking/ShadedContainer.cs: Don't store
screen coordinates because those may change if the main window is
moved. Should fix bug #595192 - Pad shadow rendering issues.
svn path=/trunk/monodevelop/; revision=155787
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs index f8d20a906e..b85e676fba 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs @@ -72,6 +72,7 @@ namespace MonoDevelop.Components.Docking w.Shown += HandleWShown; w.Hidden += HandleWHidden; w.SizeAllocated += HandleWSizeAllocated; + w.Realized += HandleWRealized; IShadedWidget sw = w as IShadedWidget; if (sw != null) sw.AreasChanged += HandleSwAreasChanged; @@ -85,6 +86,7 @@ namespace MonoDevelop.Components.Docking w.Destroyed -= HandleWDestroyed; w.Shown -= HandleWShown; w.Hidden -= HandleWHidden; + w.Realized -= HandleWRealized; IShadedWidget sw = w as IShadedWidget; if (sw != null) sw.AreasChanged -= HandleSwAreasChanged; @@ -94,19 +96,14 @@ namespace MonoDevelop.Components.Docking void UpdateAllocation (Widget w) { if (w.IsRealized) { - int x, y; - w.GdkWindow.GetOrigin (out x, out y); IShadedWidget sw = w as IShadedWidget; if (sw != null) { List<Gdk.Rectangle> rects = new List<Gdk.Rectangle> (); - foreach (Gdk.Rectangle ar in sw.GetShadedAreas ()) { - Gdk.Rectangle r = new Gdk.Rectangle (x + ar.X, y + ar.Y, ar.Width, ar.Height); - rects.Add (r); - } + foreach (Gdk.Rectangle ar in sw.GetShadedAreas ()) + rects.Add (ar); allocations [w] = rects.ToArray (); } else { - Gdk.Rectangle r = new Gdk.Rectangle (x + w.Allocation.X, y + w.Allocation.Y, w.Allocation.Width, w.Allocation.Height); - allocations [w] = new Gdk.Rectangle [] { r }; + allocations [w] = new Gdk.Rectangle [] { w.Allocation }; } } else { @@ -114,6 +111,12 @@ namespace MonoDevelop.Components.Docking } } + void HandleWRealized (object sender, EventArgs e) + { + UpdateAllocation ((Widget) sender); + RedrawAll (); + } + void HandleSwAreasChanged (object sender, EventArgs e) { UpdateAllocation ((Gtk.Widget)sender); @@ -181,11 +184,14 @@ namespace MonoDevelop.Components.Docking secsL.Add (s); secsR.Add (s); - foreach (var rects in allocations.Values) { - foreach (Gdk.Rectangle sr in rects) { - if (sr == rect) + foreach (var rects in allocations) { + int sx, sy; + rects.Key.GdkWindow.GetOrigin (out sx, out sy); + foreach (Gdk.Rectangle srt in rects.Value) { + if (srt == rect) continue; - + Gdk.Rectangle sr = srt; + sr.Offset (sx, sy); if (sr.Right == rect.X) RemoveSection (secsL, sr.Y - rect.Y, sr.Height); if (sr.Bottom == rect.Y) |