Browse Source

Reverted docking library patch from revision 1181. Hopefully this will fix SD2-1244: Layout change causing InvalidOperationException in DockPane

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2158 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
2209a49fcf
  1. 81
      src/Libraries/DockPanel_Src/WinFormsUI/Docking/DockPane.cs
  2. 20
      src/Libraries/DockPanel_Src/patchnotes.txt

81
src/Libraries/DockPanel_Src/WinFormsUI/Docking/DockPane.cs

@ -9,7 +9,6 @@ @@ -9,7 +9,6 @@
// *****************************************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.InteropServices;
@ -174,31 +173,6 @@ namespace WeifenLuo.WinFormsUI @@ -174,31 +173,6 @@ namespace WeifenLuo.WinFormsUI
base.Dispose(disposing);
}
private class VisitedTabsCollection
{
List<IDockContent> list = new List<IDockContent>();
public int Count {
get {
return list.Count;
}
}
public void PushOrMoveToEnd(IDockContent content)
{
for (int i = 0; i < list.Count; i++) {
if (list[i] == content || list[i].IsDisposed) {
list.RemoveAt(i--);
}
}
list.Add(content);
}
public IDockContent Pop()
{
IDockContent content = list[list.Count - 1];
list.RemoveAt(list.Count - 1);
return content;
}
}
private VisitedTabsCollection m_visitedTabs = new VisitedTabsCollection();
private IDockContent m_activeContent = null;
/// <include file='CodeDoc\DockPane.xml' path='//CodeDoc/Class[@name="DockPane"]/Property[@name="ActiveContent"]/*'/>
public virtual IDockContent ActiveContent
@ -227,11 +201,6 @@ namespace WeifenLuo.WinFormsUI @@ -227,11 +201,6 @@ namespace WeifenLuo.WinFormsUI
m_activeContent = value;
if (m_activeContent != null && m_activeContent.DockHandler.DockState == DockState.Document)
{
m_visitedTabs.PushOrMoveToEnd(m_activeContent);
}
if (DockPanel.DocumentStyle == DocumentStyles.DockingMdi && DockState == DockState.Document)
{
if (m_activeContent != null)
@ -766,43 +735,27 @@ namespace WeifenLuo.WinFormsUI @@ -766,43 +735,27 @@ namespace WeifenLuo.WinFormsUI
return;
IDockContent prevVisible = null;
if (ActiveContent.DockHandler.DockState == DockState.Unknown)
{
while(m_visitedTabs.Count > 0)
for (int i=Contents.IndexOf(ActiveContent)-1; i>=0; i--)
if (Contents[i].DockHandler.DockState == DockState)
{
prevVisible = m_visitedTabs.Pop();
if (prevVisible != null && !prevVisible.IsDisposed && prevVisible != ActiveContent)
break;
prevVisible = Contents[i];
break;
}
}
if (prevVisible != null) {
IDockContent nextVisible = null;
for (int i=Contents.IndexOf(ActiveContent)+1; i<Contents.Count; i++)
if (Contents[i].DockHandler.DockState == DockState)
{
nextVisible = Contents[i];
break;
}
if (prevVisible != null)
ActiveContent = prevVisible;
} else {
for (int i=Contents.IndexOf(ActiveContent)-1; i>=0; i--)
if (Contents[i].DockHandler.DockState == DockState)
{
prevVisible = Contents[i];
break;
}
IDockContent nextVisible = null;
for (int i=Contents.IndexOf(ActiveContent)+1; i<Contents.Count; i++)
if (Contents[i].DockHandler.DockState == DockState)
{
nextVisible = Contents[i];
break;
}
if (prevVisible != null)
ActiveContent = prevVisible;
else if (nextVisible != null)
ActiveContent = nextVisible;
else
ActiveContent = null;
}
else if (nextVisible != null)
ActiveContent = nextVisible;
else
ActiveContent = null;
}
private static readonly object DockStateChangedEvent = new object();

20
src/Libraries/DockPanel_Src/patchnotes.txt

@ -8,19 +8,11 @@ Patch #1: @@ -8,19 +8,11 @@ Patch #1:
Committed in revision 1147.
Patch #2:
Fixed CREATESTRUCT, MDICREATESTRUCT and WINDOWPOS P/Invoke structure declarations:
use IntPtr instead of int - we have to use a pointer-size integers here for 64-bit systems
Committed in revision 1335.
Patch #3:
Activate the autohide pad explicitly - in DockContentHandler.cs
(DockContentHandler.Activate())
Index: WinFormsUI/Docking/DockContentHandler.cs
===================================================================
--- WinFormsUI/Docking/DockContentHandler.cs (revision 1839)
+++ WinFormsUI/Docking/DockContentHandler.cs (working copy)
@@ -608,6 +608,9 @@
Form.Activate();
else if (!Form.ContainsFocus)
{
+ if (DockHelper.IsDockStateAutoHide(DockState) && DockPanel.ActiveAutoHideContent != Content)
+ DockPanel.ActiveAutoHideContent = Content;
+
if (Contains(ActiveWindowHandle))
User32.SetFocus(ActiveWindowHandle);
Committed in revision 1840.

Loading…
Cancel
Save