diff options
author | Mike Krüger <mikkrg@microsoft.com> | 2018-04-16 13:51:20 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-16 13:51:20 +0300 |
commit | 0194f63345827df93d2d103f083375155daf071d (patch) | |
tree | 3e1c9c6c648989cc3dbcc8017f6b4f84cb352f63 /main/src/core | |
parent | 6dda883bd60ddcb086d94b72f9e2d2ea27e56ec3 (diff) | |
parent | 57b47962483b6c3a860592f316125365ff4728c4 (diff) |
Merge pull request #4546 from mono/master-fix597271
Fixes VSTS 597271: [Feedback] Getting "The type initializer for
Diffstat (limited to 'main/src/core')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/OSXEditor.cs | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/OSXEditor.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/OSXEditor.cs index 46842333f1..5e97624536 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/OSXEditor.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/OSXEditor.cs @@ -34,19 +34,31 @@ namespace MonoDevelop.Ide.Editor { class OSXEditor { + static bool hasLoaded; static Xwt.Drawing.Image image; + static object loadLock = new object (); public static Xwt.Drawing.Image IBeamCursorImage { get { - if (image != null) - return image; - var cacheFileName = Path.Combine(UserProfile.Current.CacheDir, "MacCursorImage.tiff"); - if (!File.Exists(cacheFileName)) - NSCursor.IBeamCursor.Image.AsTiff().Save(cacheFileName, true); - var img = Xwt.Drawing.Image.FromFile(cacheFileName); - var size = NSCursor.IBeamCursor.Image.Size; - image = img.WithSize(size.Width, size.Height); - return image; + lock (loadLock) { + if (hasLoaded) + return image; + try { + var cacheFileName = Path.Combine (UserProfile.Current.CacheDir, "MacCursorImage.tiff"); + if (!File.Exists (cacheFileName)) { + NSCursor.IBeamCursor.Image.AsTiff ().Save (cacheFileName, true); + } + var img = Xwt.Drawing.Image.FromFile (cacheFileName); + var size = NSCursor.IBeamCursor.Image.Size; + image = img.WithSize (size.Width, size.Height); + return image; + } catch (Exception e) { + LoggingService.LogError ("Error while getting IBeam cursor image.", e); + return null; + } finally { + hasLoaded = true; + } + } } } |