Browse Source

Fixed SD2-426: About box / Version info tab / Copy (the clipboard seems to be set correctly, we can ignore the ExternalException)

Fixed SD2-684: Cannot open a new form without saving it first.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1117 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
98335d8152
  1. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerResourceService.cs
  2. 20
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaClipboardHandler.cs
  3. 12
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/COMReferencePanel.cs
  4. 4
      src/Main/Base/Project/Src/Gui/Pads/SideBarView.cs
  5. 12
      src/Main/Base/Project/Src/Project/Items/TypeLibrary.cs
  6. 2
      src/Main/Base/Project/Src/Services/File/FileService.cs
  7. 6
      src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs
  8. 1
      src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs
  9. 4
      src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs
  10. 4
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  11. 33
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs
  12. 6
      src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs
  13. 23
      src/Main/Core/Project/Src/Util/ClipboardWrapper.cs

2
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerResourceService.cs

@ -258,7 +258,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -258,7 +258,7 @@ namespace ICSharpCode.FormsDesigner.Services
}
resourceFileName.Append(Path.DirectorySeparatorChar);
string sourceFileName = Path.GetFileNameWithoutExtension(this.FileName);
if (sourceFileName.ToLowerInvariant().EndsWith(".designer")) {
if (sourceFileName != null && sourceFileName.ToLowerInvariant().EndsWith(".designer")) {
sourceFileName = sourceFileName.Substring(0, sourceFileName.Length - 9);
}
resourceFileName.Append(sourceFileName);

20
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaClipboardHandler.cs

@ -88,21 +88,15 @@ namespace ICSharpCode.TextEditor @@ -88,21 +88,15 @@ namespace ICSharpCode.TextEditor
// Work around ExternalException bug. (SD2-426)
// Best reproducable inside Virtual PC.
// SetDataObject has "retry" parameters, but apparently a call to "DoEvents"
// is necessary for the workaround to work.
int i = 0;
while (true) {
try {
Clipboard.SetDataObject(dataObject, true, 5, 50);
return true;
} catch (ExternalException) {
if (i++ > 5)
throw;
}
System.Threading.Thread.Sleep(50);
try {
Clipboard.SetDataObject(dataObject, true, 10, 50);
} catch (ExternalException) {
Application.DoEvents();
System.Threading.Thread.Sleep(50);
try {
Clipboard.SetDataObject(dataObject, true, 10, 50);
} catch (ExternalException) {}
}
return true;
} else {
return false;
}

12
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/COMReferencePanel.cs

@ -47,7 +47,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -47,7 +47,6 @@ namespace ICSharpCode.SharpDevelop.Gui
FullRowSelect = true;
ItemActivate += delegate { AddReference(); };
PopulateListView();
}
public void AddReference()
@ -61,6 +60,17 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -61,6 +60,17 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
bool populated;
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (populated == false && Visible) {
populated = true;
PopulateListView();
}
}
void PopulateListView()
{
foreach (TypeLibrary typeLib in TypeLibrary.Libraries) {

4
src/Main/Base/Project/Src/Gui/Pads/SideBarView.cs

@ -77,7 +77,9 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -77,7 +77,9 @@ namespace ICSharpCode.SharpDevelop.Gui
public static void PutInClipboardRing(string text)
{
if (sideBar != null) {
if (sideBar == null) {
WorkbenchSingleton.Workbench.GetPad(typeof(SideBarView)).CreatePad();
} else {
sideBar.PutInClipboardRing(text);
sideBar.Refresh();
}

12
src/Main/Base/Project/Src/Project/Items/TypeLibrary.cs

@ -88,10 +88,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -88,10 +88,8 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public class TypeLibraryEnumerator
{
public IEnumerator<TypeLibrary> GetEnumerator()
{
public static IEnumerable<TypeLibrary> Libraries {
get {
RegistryKey typelibsKey = Registry.ClassesRoot.OpenSubKey("TypeLib");
foreach (string typelibKeyName in typelibsKey.GetSubKeyNames()) {
RegistryKey typelibKey = typelibsKey.OpenSubKey(typelibKeyName);
@ -105,12 +103,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -105,12 +103,6 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
}
static TypeLibraryEnumerator libraries = new TypeLibraryEnumerator();
public static TypeLibraryEnumerator Libraries {
get {
return libraries;
}
}
static TypeLibrary Create(RegistryKey typelibKey)
{

2
src/Main/Base/Project/Src/Services/File/FileService.cs

@ -118,7 +118,7 @@ namespace ICSharpCode.Core @@ -118,7 +118,7 @@ namespace ICSharpCode.Core
LoggingService.Warn(String.Format("Created view content was null{3}DefaultName:{0}{3}Language:{1}{3}Content:{2}", defaultName, language, content, Environment.NewLine));
return null;
}
newContent.UntitledName = defaultName;
newContent.UntitledName = newContent.GetHashCode() + "/" + defaultName;
DisplayBindingService.AttachSubWindows(newContent, false);
WorkbenchSingleton.Workbench.ShowView(newContent);

6
src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs

@ -412,8 +412,10 @@ namespace ICSharpCode.Core @@ -412,8 +412,10 @@ namespace ICSharpCode.Core
public void RemoveCompilationUnit(ICompilationUnit unit)
{
foreach (IClass c in unit.Classes) {
RemoveClass(c);
lock (namespaces) {
foreach (IClass c in unit.Classes) {
RemoveClass(c);
}
}
}

1
src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs

@ -73,6 +73,7 @@ namespace ICSharpCode.Core @@ -73,6 +73,7 @@ namespace ICSharpCode.Core
string GetXmlDocumentation(string memberTag);
void AddClassToNamespaceList(IClass addClass);
void RemoveCompilationUnit(ICompilationUnit oldUnit);
void UpdateCompilationUnit(ICompilationUnit oldUnit, ICompilationUnit parserOutput, string fileName, bool updateCommentTags);
IClass GetClass(string typeName);

4
src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs

@ -140,10 +140,6 @@ namespace ICSharpCode.Core @@ -140,10 +140,6 @@ namespace ICSharpCode.Core
UpdateDefaultImports(project.Items.ToArray());
break;
case ItemType.Compile:
ParseInformation info = ParserService.GetParseInformation(e.ProjectItem.FileName);
if (info != null) {
RemoveCompilationUnit(info.MostRecentCompilationUnit);
}
ParserService.ClearParseInformation(e.ProjectItem.FileName);
break;
}

4
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -556,8 +556,12 @@ namespace ICSharpCode.Core @@ -556,8 +556,12 @@ namespace ICSharpCode.Core
if (fileName == null || fileName.Length == 0) {
return;
}
LoggingService.Info("ClearParseInformation: " + fileName);
if (parsings.ContainsKey(fileName)) {
ParseInformation parseInfo = parsings[fileName];
if (parseInfo != null && parseInfo.MostRecentCompilationUnit != null) {
parseInfo.MostRecentCompilationUnit.ProjectContent.RemoveCompilationUnit(parseInfo.MostRecentCompilationUnit);
}
parsings.Remove(fileName);
OnParseInformationUpdated(new ParseInformationEventArgs(fileName, parseInfo, null));
}

33
src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs

@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
b2.Load(fileName);
b2.textAreaControl.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategyForFile(fileName);
b2.textAreaControl.InitializeFormatter();
b2.ForceFoldingUpdate(null);
b2.ForceFoldingUpdate();
b2.textAreaControl.ActivateQuickClassBrowserOnDemand();
return b2;
}
@ -72,7 +72,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -72,7 +72,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
b2.textAreaControl.Document.TextContent = StringParser.Parse(content);
b2.textAreaControl.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy(language);
b2.textAreaControl.InitializeFormatter();
b2.ForceFoldingUpdate(language);
b2.textAreaControl.ActivateQuickClassBrowserOnDemand();
return b2;
}
@ -157,6 +156,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -157,6 +156,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
set {
base.UntitledName = value;
textAreaControl.FileName = value;
ForceFoldingUpdate();
}
}
@ -292,6 +292,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -292,6 +292,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
public override void Dispose()
{
if (this.IsUntitled) {
ParserService.ClearParseInformation(this.UntitledName);
}
if (WorkbenchSingleton.MainForm != null) {
WorkbenchSingleton.MainForm.Activated -= new EventHandler(GotFocusEvent);
}
@ -327,7 +330,11 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -327,7 +330,11 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
}
textAreaControl.SaveFile(fileName);
FileName = fileName;
if (fileName != this.FileName) {
ParserService.ClearParseInformation(this.FileName ?? this.UntitledName);
FileName = fileName;
ParserService.ParseViewContent(this);
}
TitleName = Path.GetFileName(fileName);
IsDirty = false;
@ -422,22 +429,14 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -422,22 +429,14 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
textAreaControl.ActiveTextAreaControl.JumpTo(line, column);
}
public void ForceFoldingUpdate(string language)
public void ForceFoldingUpdate()
{
if (textAreaControl.TextEditorProperties.EnableFolding) {
string fileName = IsUntitled ? UntitledName : FileName;
ParseInformation parseInfo;
if (fileName == null || fileName.Length == 0) {
if (language == "C#") {
parseInfo = ParserService.ParseFile("a.cs", textAreaControl.Document.TextContent, false, false);
} else if (language == "VBNet") {
parseInfo = ParserService.ParseFile("a.vb", textAreaControl.Document.TextContent, false, false);
} else {
return;
}
} else {
parseInfo = ParserService.GetParseInformation(fileName);
string fileName = textAreaControl.FileName;
ParseInformation parseInfo = ParserService.GetParseInformation(fileName);
if (parseInfo == null) {
parseInfo = ParserService.ParseFile(fileName,
textAreaControl.Document.TextContent, false, false);
}
textAreaControl.Document.FoldingManager.UpdateFoldings(fileName, parseInfo);
UpdateClassMemberBookmarks(parseInfo);

6
src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs

@ -154,8 +154,8 @@ namespace ICSharpCode.Core @@ -154,8 +154,8 @@ namespace ICSharpCode.Core
// Optimized for performance:
//return Path.GetFullPath(fileName1.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)).ToLower() == Path.GetFullPath(fileName2.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)).ToLower();
if (fileName1.Length == 0 || fileName2.Length == 0) return false;
char lastChar;
lastChar = fileName1[fileName1.Length - 1];
if (lastChar == Path.DirectorySeparatorChar || lastChar == Path.AltDirectorySeparatorChar)
@ -169,9 +169,7 @@ namespace ICSharpCode.Core @@ -169,9 +169,7 @@ namespace ICSharpCode.Core
fileName1 = Path.GetFullPath(fileName1);
if (fileName2.Length < 2 || fileName2[1] != ':' || fileName2.IndexOf("/.") >= 0 || fileName2.IndexOf("\\.") >= 0)
fileName2 = Path.GetFullPath(fileName2);
} catch (Exception) {
return false;
}
} catch (Exception) { }
return string.Equals(fileName1, fileName2, StringComparison.OrdinalIgnoreCase);
}

23
src/Main/Core/Project/Src/Util/ClipboardWrapper.cs

@ -50,24 +50,23 @@ namespace ICSharpCode.Core @@ -50,24 +50,23 @@ namespace ICSharpCode.Core
try {
return Clipboard.GetDataObject();
} catch (ExternalException) {
return Clipboard.GetDataObject();
try {
return Clipboard.GetDataObject();
} catch (ExternalException) {
return new DataObject();
}
}
}
public static void SetDataObject(object data)
{
int i = 0;
while (true) {
try {
Clipboard.SetDataObject(data, true, 5, 50);
return;
} catch (ExternalException) {
if (i++ > 5)
throw;
}
System.Threading.Thread.Sleep(50);
try {
Clipboard.SetDataObject(data, true, 10, 50);
} catch (ExternalException) {
Application.DoEvents();
System.Threading.Thread.Sleep(50);
try {
Clipboard.SetDataObject(data, true, 10, 50);
} catch (ExternalException) { }
}
}
}

Loading…
Cancel
Save