diff options
-rw-r--r-- | main/Makefile.am | 7 | ||||
-rw-r--r-- | main/build/MacOSX/Makefile.am | 3 | ||||
-rw-r--r-- | main/build/MacOSX/monostub.m | 10 | ||||
-rw-r--r-- | main/build/Makefile.am | 2 | ||||
-rw-r--r-- | main/configure.in | 7 | ||||
m--------- | main/external/debugger-libs | 0 | ||||
-rw-r--r-- | main/src/addins/MacPlatform/MainToolbar/MainToolbar.cs | 149 | ||||
-rw-r--r-- | main/src/addins/MacPlatform/MainToolbar/SelectorView.cs | 132 | ||||
-rw-r--r-- | main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/BreakpointPad.cs | 2 | ||||
-rw-r--r-- | main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs | 2 | ||||
-rw-r--r-- | main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.Projects/ProjectFileDescriptor.cs | 21 | ||||
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AutoTest/AutoTestClientSession.cs | 9 | ||||
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Components.PropertyGrid/PropertyGrid.cs | 4 | ||||
-rw-r--r-- | main/tests/UserInterfaceTests/LogMessageValidator.cs | 9 | ||||
-rwxr-xr-x | version-checks | 2 |
15 files changed, 263 insertions, 96 deletions
diff --git a/main/Makefile.am b/main/Makefile.am index 4f8c22d2a5..195f502fba 100644 --- a/main/Makefile.am +++ b/main/Makefile.am @@ -108,7 +108,14 @@ apidocs: MD_LAUNCH=$(MD_LAUNCH_SETUP) $(MD_LAUNCH_EXTRA_ENV) UBUNTU_MENUPROXY=0 LIBOVERLAY_SCROLLBAR=0 exec -a "monodevelop" $(RUNTIME) +if ENABLE_MACPLATFORM +run: run-bundle +else run: run-sgen +endif + +run-bundle: $(PROGRAM) + $(MD_LAUNCH_SETUP) $(MD_LAUNCH_EXTRA_ENV) $(MD_BIN_PATH)/MonoDevelop --no-redirect run-boehm: runmd diff --git a/main/build/MacOSX/Makefile.am b/main/build/MacOSX/Makefile.am index 9a31efadb3..d0a71d7be7 100644 --- a/main/build/MacOSX/Makefile.am +++ b/main/build/MacOSX/Makefile.am @@ -16,7 +16,7 @@ CLEANFILES = render.exe #DISTCLEANFILES = EXTRA_DIST = dmg-bg.png DS_Store Info.plist.in make-dmg-bundle.sh render.cs -all: app +all: monostub render.exe: render.cs gmcs -r:System.Drawing render.cs @@ -27,6 +27,7 @@ dmg: render.exe app monostub: monostub.m $(MONOSTUB_EXTRA_SOURCES) gcc -Wall -mmacosx-version-min=10.10 -m32 -o $@ $^ -framework AppKit # gcc -Wall -mmacosx-version-min=10.10 -m32 -o $@ $^ -framework AppKit -isysroot $(SDK_PATH) + cp monostub ../bin/MonoDevelop clean-local: rm -rf MonoDevelop.app diff --git a/main/build/MacOSX/monostub.m b/main/build/MacOSX/monostub.m index b38169814d..212abab0f6 100644 --- a/main/build/MacOSX/monostub.m +++ b/main/build/MacOSX/monostub.m @@ -381,6 +381,16 @@ int main (int argc, char **argv) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *binDir = [[NSString alloc] initWithUTF8String: "Contents/Resources/lib/monodevelop/bin"]; + + // Check if we are running inside an actual app bundle. If we are not, then assume we're being run + // as part of `make run` and then binDir should be '.' + NSString *entryExecutable = [[NSString alloc] initWithUTF8String: argv[0]]; + NSArray *components = [NSArray arrayWithObjects:[entryExecutable stringByDeletingLastPathComponent], @"..", @"..", binDir, nil]; + NSString *binDirFullPath = [NSString pathWithComponents:components]; + BOOL isDir = NO; + if (![[NSFileManager defaultManager] fileExistsAtPath: binDirFullPath isDirectory: &isDir] || !isDir) + binDir = [[NSString alloc] initWithUTF8String: "."]; + NSString *appDir = [[NSBundle mainBundle] bundlePath]; // can be overridden with plist string MonoMinVersion NSString *req_mono_version = @"3.10"; diff --git a/main/build/Makefile.am b/main/build/Makefile.am index 9217be1a33..b8863d3775 100644 --- a/main/build/Makefile.am +++ b/main/build/Makefile.am @@ -1,5 +1,5 @@ -if ENABLE_MACBUNDLE +if ENABLE_MACPLATFORM SUBDIRS = MacOSX else diff --git a/main/configure.in b/main/configure.in index a9371febc3..5f99604a45 100644 --- a/main/configure.in +++ b/main/configure.in @@ -213,13 +213,6 @@ fi AM_CONDITIONAL(ENABLE_MACPLATFORM, [test x$enable_macplatform = xyes]) -# Mac bundle -AC_ARG_ENABLE(macbundle, - AC_HELP_STRING([--enable-macbundle], - [enable Mac bundle packaging [default=no]]), - enable_macbundle=${enableval}, enable_macbundle=no) -AM_CONDITIONAL(ENABLE_MACBUNDLE, [test x$enable_macbundle = xyes]) - # Windows platform addin AC_ARG_ENABLE(windowsplatform, AC_HELP_STRING([--enable-windowsplatform], diff --git a/main/external/debugger-libs b/main/external/debugger-libs -Subproject 195001e4676f1a99066b6b50616f803da93ae8a +Subproject a129a42bcdd0f978fbc911b696d323f6911d600 diff --git a/main/src/addins/MacPlatform/MainToolbar/MainToolbar.cs b/main/src/addins/MacPlatform/MainToolbar/MainToolbar.cs index ff5e092854..0f736344e7 100644 --- a/main/src/addins/MacPlatform/MainToolbar/MainToolbar.cs +++ b/main/src/addins/MacPlatform/MainToolbar/MainToolbar.cs @@ -33,6 +33,7 @@ using AppKit; using CoreGraphics; using Foundation; using MonoDevelop.Ide; +using Xwt; namespace MonoDevelop.MacIntegration.MainToolbar { @@ -66,6 +67,10 @@ namespace MonoDevelop.MacIntegration.MainToolbar } int selectorIdx; + SelectorView selector { + get { return (SelectorView)widget.Items[selectorIdx].View; } + } + SelectorView.PathSelectorView selectorView { get { return (SelectorView.PathSelectorView)widget.Items[selectorIdx].View.Subviews [0]; } } @@ -96,6 +101,35 @@ namespace MonoDevelop.MacIntegration.MainToolbar return item; } + OverflowInfoEventArgs FillOverflowInfo (OverflowInfoEventArgs e) + { + var visibleItems = widget.VisibleItems; + var allItems = widget.Items; + + e.WindowWidth = gtkWindow.Allocation.Width; + foreach (var iter in allItems) { + e.AllItemsWidth += iter.MinSize.Width; + if (!visibleItems.Contains (iter)) + e.ItemsInOverflowWidth += iter.MinSize.Width; + } + // Add spacings. + nfloat spacing = (allItems.Length - 1) * 16; + e.AllItemsWidth += spacing; + + return e; + } + + bool IsCorrectNotification (NSView view, NSObject notifObject) + { + var window = selector.Window; + + // Skip updates with a null Window. Only crashes on Mavericks. + // The View gets updated once again when the window resize finishes. + // We're getting notified about all windows in the application (for example, NSPopovers) that change size when really we only care about + // the window the bar is in. + return window != null && notifObject == window; + } + NSToolbarItem CreateSelectorToolbarItem () { var selector = new SelectorView (); @@ -109,6 +143,43 @@ namespace MonoDevelop.MacIntegration.MainToolbar item.MinSize = item.MaxSize = e.Size; centeringSpace.UpdateWidth (); }; + selector.OverflowInfoRequested += (o, e) => { + FillOverflowInfo (e); + }; + + IDisposable resizeTimer = null; + NSNotificationCenter.DefaultCenter.AddObserver (NSWindow.WillStartLiveResizeNotification, notif => DispatchService.GuiDispatch (() => { + if (!IsCorrectNotification (selector, notif.Object)) + return; + + if (resizeTimer != null) + resizeTimer.Dispose (); + + resizeTimer = Application.TimeoutInvoke (100, () => { + if (widget.Items.Length != widget.VisibleItems.Length) + selector.RequestResize (); + return true; + }); + })); + + NSNotificationCenter.DefaultCenter.AddObserver (NSWindow.DidResizeNotification, notif => DispatchService.GuiDispatch (() => { + if (!IsCorrectNotification (selector, notif.Object)) + return; + + // Don't check difference in overflow menus. This could cause issues since we're doing resizing of widgets and the views might go in front + // or behind while we're doing the resize request. + selector.RequestResize (); + })); + + NSNotificationCenter.DefaultCenter.AddObserver (NSWindow.DidEndLiveResizeNotification, notif => DispatchService.GuiDispatch (() => { + if (!IsCorrectNotification (selector, notif.Object)) + return; + + if (resizeTimer != null) + resizeTimer.Dispose (); + + resizeTimer = Application.TimeoutInvoke (300, selector.RequestResize); + })); var pathSelector = (SelectorView.PathSelectorView)selector.Subviews [0]; pathSelector.ConfigurationChanged += (sender, e) => { @@ -143,6 +214,7 @@ namespace MonoDevelop.MacIntegration.MainToolbar nfloat resize = 6 + 33 * bar.SegmentCount; item.MinSize = new CGSize (resize, bar.FittingSize.Height); item.MaxSize = new CGSize (resize, bar.FittingSize.Height); + selector.RequestResize (); centeringSpace.UpdateWidth (); }; return item; @@ -181,15 +253,9 @@ namespace MonoDevelop.MacIntegration.MainToolbar bar.GainedFocus += (o, e) => IdeApp.Workbench.RootWindow.Focus = null; viewCache.Add (bar); - var menuBar = new SearchBar { - Frame = new CGRect (0, 0, 180, bar.FittingSize.Height), - }; var item = new NSToolbarItem (SearchBarId) { View = bar, - MenuFormRepresentation = new NSMenuItem { - View = menuBar, - }, - MinSize = new CGSize (180, bar.FittingSize.Height), + MinSize = new CGSize (150, bar.FittingSize.Height), MaxSize = new CGSize (270, bar.FittingSize.Height), }; AttachToolbarEvents (bar); @@ -207,7 +273,7 @@ namespace MonoDevelop.MacIntegration.MainToolbar MaxSize = new CGSize (360, 22), }; - NSNotificationCenter.DefaultCenter.AddObserver (NSWindow.DidResizeNotification, notif => DispatchService.GuiDispatch (() => { + Action<NSNotification> resizeAction = notif => DispatchService.GuiDispatch (() => { // Skip updates with a null Window. Only crashes on Mavericks. // The View gets updated once again when the window resize finishes. if (bar.Window == null) @@ -220,10 +286,13 @@ namespace MonoDevelop.MacIntegration.MainToolbar double maxSize = Math.Round (bar.Window.Frame.Width * 0.30f); double minSize = Math.Round (bar.Window.Frame.Width * 0.25f); - item.MinSize = new CGSize ((nfloat)Math.Max (280, minSize), 22); + item.MinSize = new CGSize ((nfloat)Math.Max (220, minSize), 22); item.MaxSize = new CGSize ((nfloat)Math.Min (700, maxSize), 22); bar.RepositionStatusLayers (); - })); + }); + + NSNotificationCenter.DefaultCenter.AddObserver (NSWindow.DidResizeNotification, resizeAction); + NSNotificationCenter.DefaultCenter.AddObserver (NSWindow.DidEndLiveResizeNotification, resizeAction); return item; } @@ -284,32 +353,12 @@ namespace MonoDevelop.MacIntegration.MainToolbar public event EventHandler SearchEntryResized; #pragma warning restore 0067 - bool IsSearchEntryInOverflow { - get { return widget.Items.Length != widget.VisibleItems.Length; } - } - public void FocusSearchBar () { searchEntry.Focus (); var entry = searchEntry; - if (!IsSearchEntryInOverflow) - entry.SelectText (entry); - else { - // NSSearchField -> NSToolbarItemViewer -> _NSToolbarClipView -> NSToolbarView -> NSToolbarClippedItemsIndicator - var clipItem = (NSButton)searchEntry.Superview.Superview.Superview.Subviews [1]; - var sel = new ObjCRuntime.Selector ("_computeMenuForClippedItemsIfNeeded"); - if (!clipItem.RespondsToSelector (sel)) - throw new Exception ("Cocoa selector changed for clipped items menu."); - - clipItem.PerformSelector (sel); - var menu = clipItem.Menu; - var searchItem = menu.ItemAt (0); - var searchView = (SearchBar)searchItem.View; - AttachToolbarEvents (searchView); - menu.PopUpMenu (menu.ItemAt (0), new CGPoint (0, -5), clipItem); - searchView.SelectText (searchView); - } + entry.SelectText (entry); } List<IButtonBarButton> barItems = new List<IButtonBarButton> (); @@ -409,44 +458,10 @@ namespace MonoDevelop.MacIntegration.MainToolbar public string SearchText { get { - if (!IsSearchEntryInOverflow) { - return searchEntry.StringValue; - } - - // NSSearchField -> NSToolbarItemViewer -> _NSToolbarClipView -> NSToolbarView -> NSToolbarClippedItemsIndicator - var clipItem = (NSButton)searchEntry.Superview.Superview.Superview.Subviews [1]; - var sel = new ObjCRuntime.Selector ("_computeMenuForClippedItemsIfNeeded"); - if (!clipItem.RespondsToSelector (sel)) - throw new Exception ("Cocoa selector changed for clipped items menu."); - - clipItem.PerformSelector (sel); - - var menuBar = (SearchBar)clipItem.Menu.ItemAt (0).View; - AttachToolbarEvents (menuBar); - return menuBar.StringValue; + return searchEntry.StringValue; } set { - if (!IsSearchEntryInOverflow) { - searchEntry.StringValue = value; - return; - } - - // NSSearchField -> NSToolbarItemViewer -> _NSToolbarClipView -> NSToolbarView -> NSToolbarClippedItemsIndicator - var clipItem = (NSButton)searchEntry.Superview.Superview.Superview.Subviews [1]; - var sel = new ObjCRuntime.Selector ("_computeMenuForClippedItemsIfNeeded"); - if (!clipItem.RespondsToSelector (sel)) - throw new Exception ("Cocoa selector changed for clipped items menu."); - - clipItem.PerformSelector (sel); - - foreach (NSMenuItem item in clipItem.Menu.ItemArray ()) { - if (item.View is SearchBar) { - var menuBar = (SearchBar)item.View; - AttachToolbarEvents (menuBar); - menuBar.StringValue = value; - break; - } - } + searchEntry.StringValue = value; } } diff --git a/main/src/addins/MacPlatform/MainToolbar/SelectorView.cs b/main/src/addins/MacPlatform/MainToolbar/SelectorView.cs index a2f3cd79cc..3c4c4fbfc4 100644 --- a/main/src/addins/MacPlatform/MainToolbar/SelectorView.cs +++ b/main/src/addins/MacPlatform/MainToolbar/SelectorView.cs @@ -45,10 +45,18 @@ namespace MonoDevelop.MacIntegration.MainToolbar } } + class OverflowInfoEventArgs : EventArgs + { + public nfloat WindowWidth { get; set; } + public nfloat AllItemsWidth { get; set; } + public nfloat ItemsInOverflowWidth { get; set; } + } + [Register] class SelectorView : NSButton { public event EventHandler<SizeRequestedEventArgs> ResizeRequested; + public event EventHandler<OverflowInfoEventArgs> OverflowInfoRequested; internal const int ConfigurationIdx = 0; internal const int RuntimeIdx = 1; @@ -61,28 +69,104 @@ namespace MonoDevelop.MacIntegration.MainToolbar AddSubview (pathSelectorView); } - public override void DrawRect (CGRect dirtyRect) + public bool RequestResize () { - var p = (NSPathControl)Subviews [0]; - var size = new CGSize (10 + - p.PathComponentCells [ConfigurationIdx].CellSize.Width + - p.PathComponentCells [RuntimeIdx].CellSize.Width + p.Frame.Left, - Frame.Size.Height); - if (ResizeRequested != null) - ResizeRequested (this, new SizeRequestedEventArgs (size)); - - SetFrameSize (size); - p.SetFrameSize (size); - p.SetNeedsDisplay (); - base.DrawRect (new CGRect (CGPoint.Empty, size)); + var p = (PathSelectorView)Subviews [0]; + var overflowInfo = new OverflowInfoEventArgs (); + if (OverflowInfoRequested != null) + OverflowInfoRequested (this, overflowInfo); + + var size = new CGSize (p.ResizeIfNeeded (overflowInfo), Frame.Height); + + if (size != Frame.Size) { + if (ResizeRequested != null) + ResizeRequested (this, new SizeRequestedEventArgs (size)); + + SetFrameSize (size); + p.SetFrameSize (size); + + SetNeedsDisplay (); + p.SetNeedsDisplay (); + return true; + } + return false; + } + + public override void ViewWillDraw () + { + RequestResize (); + base.ViewWillDraw (); } #region PathSelectorView [Register] public class PathSelectorView : NSPathControl { + [Flags] + enum CellState + { + AllHidden = 0x0, + RuntimeShown = 0x1, + ConfigurationShown = 0x2, + AllShown = 0x3, + } + static readonly string ConfigurationPlaceholder = GettextCatalog.GetString ("Default"); static readonly string RuntimePlaceholder = GettextCatalog.GetString ("Default"); + CellState state = CellState.AllShown; + + nfloat UpdatePathCellForSize (int idx, nfloat remaining, CellState newStateIfEnoughSize) + { + var cell = PathComponentCells [idx]; + string text; + if (idx == ConfigurationIdx) { + if (ActiveConfiguration != null) + text = ActiveConfiguration.DisplayString; + else + text = ConfigurationPlaceholder; + } else { + if (ActiveRuntime != null) { + using (var mutableModel = ActiveRuntime.GetMutableModel ()) + text = mutableModel.FullDisplayString; + } else + text = RuntimePlaceholder; + } + var size = new NSAttributedString (text, new NSStringAttributes { Font = cell.Font }).Size.Width + 20; + if (size < remaining) { + state |= newStateIfEnoughSize; + UpdatePathText (idx, text); + } + return remaining - size; + } + + internal nfloat ResizeIfNeeded (OverflowInfoEventArgs args) + { + var remaining = args.WindowWidth - args.AllItemsWidth; + if (remaining < 0 || args.ItemsInOverflowWidth > 0) { + var cell = PathComponentCells [RuntimeIdx]; + var size = new NSAttributedString (cell.Title, new NSStringAttributes { Font = cell.Font }).Size.Width; + remaining += size; + args.ItemsInOverflowWidth -= size; + if ((state & CellState.RuntimeShown) != 0) { + state &= ~CellState.RuntimeShown; + UpdatePathText (RuntimeIdx, string.Empty); + } + if ((remaining < 0 || args.ItemsInOverflowWidth > 0) && (state & CellState.ConfigurationShown) != 0) { + state &= ~CellState.ConfigurationShown; + UpdatePathText (ConfigurationIdx, string.Empty); + } + } else { + remaining = remaining - args.ItemsInOverflowWidth; + if ((state & CellState.ConfigurationShown) == 0) + remaining = UpdatePathCellForSize (ConfigurationIdx, remaining, CellState.ConfigurationShown); + if ((state & CellState.RuntimeShown) == 0) + UpdatePathCellForSize (RuntimeIdx, remaining, CellState.RuntimeShown); + } + + return 10 + + PathComponentCells [ConfigurationIdx].CellSize.Width + + PathComponentCells [RuntimeIdx].CellSize.Width + Frame.Left; + } NSMenu CreateSubMenuForRuntime (IRuntimeModel runtime) { @@ -184,6 +268,9 @@ namespace MonoDevelop.MacIntegration.MainToolbar Font = NSFont.MenuFontOfSize (12), }; if (object.ReferenceEquals (ClickedPathComponentCell, PathComponentCells [ConfigurationIdx])) { + if (ActiveConfiguration == null) + return; + foreach (var configuration in ConfigurationModel) { if (idx == -1 && configuration.OriginalId == ActiveConfiguration.OriginalId) idx = i; @@ -201,6 +288,9 @@ namespace MonoDevelop.MacIntegration.MainToolbar ++i; } } else if (object.ReferenceEquals (ClickedPathComponentCell, PathComponentCells [RuntimeIdx])) { + if (ActiveRuntime == null) + return; + using (var activeMutableModel = ActiveRuntime.GetMutableModel ()) { foreach (var runtime in RuntimeModel) { using (var mutableModel = runtime.GetMutableModel ()) { @@ -254,7 +344,8 @@ namespace MonoDevelop.MacIntegration.MainToolbar void UpdatePathText (int idx, string text) { - PathComponentCells [idx].Title = text; + bool showText = (idx == ConfigurationIdx && (state & CellState.ConfigurationShown) != 0) || (idx == RuntimeIdx && (state & CellState.RuntimeShown) != 0); + PathComponentCells [idx].Title = showText ? text : "\u00A0"; PathComponentCells [ConfigurationIdx].Image = ImageService.GetIcon ("project").ToNSImage (); PathComponentCells [RuntimeIdx].Image = ImageService.GetIcon ("device").ToNSImage (); @@ -266,6 +357,7 @@ namespace MonoDevelop.MacIntegration.MainToolbar get { return activeConfiguration; } set { activeConfiguration = value; + state |= CellState.ConfigurationShown; UpdatePathText (ConfigurationIdx, value.DisplayString); } } @@ -275,8 +367,10 @@ namespace MonoDevelop.MacIntegration.MainToolbar get { return activeRuntime; } set { activeRuntime = value; - using (var mutableModel = value.GetMutableModel ()) + using (var mutableModel = value.GetMutableModel ()) { + state |= CellState.RuntimeShown; UpdatePathText (RuntimeIdx, mutableModel.FullDisplayString); + } } } @@ -286,8 +380,10 @@ namespace MonoDevelop.MacIntegration.MainToolbar set { configurationModel = value; int count = value.Count (); - if (count == 0) + if (count == 0) { + state |= CellState.ConfigurationShown; UpdatePathText (ConfigurationIdx, ConfigurationPlaceholder); + } PathComponentCells [ConfigurationIdx].Enabled = count > 1; } } @@ -298,8 +394,10 @@ namespace MonoDevelop.MacIntegration.MainToolbar set { runtimeModel = value; int count = value.Count (); - if (count == 0) + if (count == 0) { + state |= CellState.RuntimeShown; UpdatePathText (RuntimeIdx, RuntimePlaceholder); + } PathComponentCells [RuntimeIdx].Enabled = count > 1; } } diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/BreakpointPad.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/BreakpointPad.cs index 0fb2f42f16..a17a83ce5d 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/BreakpointPad.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/BreakpointPad.cs @@ -387,6 +387,8 @@ namespace MonoDevelop.Debugger if (breakpoints != null) { lock (breakpoints) { foreach (BreakEvent be in breakpoints.GetBreakevents ()) { + if (be.NonUserBreakpoint) + continue; string hitCount = be.HitCountMode != HitCountMode.None ? be.CurrentHitCount.ToString () : ""; string traceExp = (be.HitAction & HitAction.PrintExpression) != HitAction.None ? be.TraceExpression : ""; string traceVal = (be.HitAction & HitAction.PrintExpression) != HitAction.None ? be.LastTraceValue : ""; diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs index 742bd9c4b5..1a0e0c06f2 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs @@ -748,6 +748,8 @@ namespace MonoDevelop.Debugger static void OnTargetEvent (object sender, TargetEventArgs args) { + if (args.BreakEvent != null && args.BreakEvent.NonUserBreakpoint) + return; nextStatementLocations.Clear (); try { diff --git a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.Projects/ProjectFileDescriptor.cs b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.Projects/ProjectFileDescriptor.cs index 0a95a9c589..b8d923df82 100644 --- a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.Projects/ProjectFileDescriptor.cs +++ b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.Projects/ProjectFileDescriptor.cs @@ -31,16 +31,34 @@ using System.ComponentModel; using MonoDevelop.Projects; using MonoDevelop.Core; using MonoDevelop.Ide; +using System.Linq; namespace MonoDevelop.DesignerSupport { - class ProjectFileDescriptor: CustomDescriptor + class ProjectFileDescriptor: CustomDescriptor, IDisposable { ProjectFile file; public ProjectFileDescriptor (ProjectFile file) { this.file = file; + file.Project.FilePropertyChangedInProject += OnFilePropertyChangedInProject; + } + + void OnFilePropertyChangedInProject (object sender, ProjectFileEventArgs args) + { + var pad = IdeApp.Workbench.GetPad <PropertyPad> (); + if (pad == null) + return; + + var grid = ((PropertyPad)pad.Content).PropertyGrid; + if (args.Any (arg => arg.ProjectFile == file)) + grid.Refresh (); + } + + void IDisposable.Dispose () + { + file.Project.FilePropertyChangedInProject -= OnFilePropertyChangedInProject; } [LocalizedCategory ("Misc")] @@ -71,6 +89,7 @@ namespace MonoDevelop.DesignerSupport [LocalizedDisplayName ("Build action")] [LocalizedDescription ("Action to perform when building this file.")] [TypeConverter (typeof (BuildActionStringsConverter))] + [RefreshProperties(RefreshProperties.All)] public string BuildAction { get { return file.BuildAction; } set { file.BuildAction = value; } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AutoTest/AutoTestClientSession.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AutoTest/AutoTestClientSession.cs index 085c1cba86..6edbd7c063 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AutoTest/AutoTestClientSession.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AutoTest/AutoTestClientSession.cs @@ -65,6 +65,15 @@ namespace MonoDevelop.Components.AutoTest if (file == null) { var binDir = Path.GetDirectoryName (typeof(AutoTestClientSession).Assembly.Location); file = Path.Combine (binDir, "MonoDevelop.exe"); + if (!File.Exists (file)) { + file = Path.Combine (binDir, "XamarinStudio.exe"); + } + } else if (!File.Exists (file)) { + file = file.Replace ("MonoDevelop.exe", "XamarinStudio.exe"); + } + + if (!File.Exists (file)) { + throw new FileNotFoundException (file); } MonoDevelop.Core.Execution.RemotingService.RegisterRemotingChannel (); diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.PropertyGrid/PropertyGrid.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.PropertyGrid/PropertyGrid.cs index 5f5e6d9e95..b3914cc0ec 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.PropertyGrid/PropertyGrid.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.PropertyGrid/PropertyGrid.cs @@ -252,6 +252,10 @@ namespace MonoDevelop.Components.PropertyGrid { if (this.currentObject == obj)
return;
+ if (this.propertyProviders != null) {
+ foreach (var old in this.propertyProviders.OfType<IDisposable> ())
+ old.Dispose ();
+ }
this.currentObject = obj; this.propertyProviders = propertyProviders; UpdateTabs ();
diff --git a/main/tests/UserInterfaceTests/LogMessageValidator.cs b/main/tests/UserInterfaceTests/LogMessageValidator.cs index 3089c76271..fc2f875f14 100644 --- a/main/tests/UserInterfaceTests/LogMessageValidator.cs +++ b/main/tests/UserInterfaceTests/LogMessageValidator.cs @@ -38,7 +38,14 @@ namespace UserInterfaceTests public static void Validate (string fileName) { - var readIdeLog = File.ReadAllText (fileName); + string readIdeLog = string.Empty; + using (FileStream fileStream = new FileStream (fileName, FileMode.Open, + FileAccess.Read, FileShare.ReadWrite)) { + using (StreamReader streamReader = new StreamReader (fileStream)) { + readIdeLog = streamReader.ReadToEnd (); + } + } + foreach (var error in invalidLogStrings) { Assert.IsFalse (readIdeLog.Contains (error), string.Format ("GTK Error detected in Ide.log file:\n\t{0}",error)); diff --git a/version-checks b/version-checks index be8df640a5..7a6e7405d7 100755 --- a/version-checks +++ b/version-checks @@ -17,7 +17,7 @@ DEP[0]=md-addins DEP_NAME[0]=MDADDINS DEP_PATH[0]=${top_srcdir}/../md-addins DEP_MODULE[0]=git@github.com:xamarin/md-addins.git -DEP_NEEDED_VERSION[0]=82287cf970ad11bf5921ca53253e3e0af80bd048 +DEP_NEEDED_VERSION[0]=09938395efd431a36dc96dbdff1d53a4b8255691 DEP_BRANCH_AND_REMOTE[0]="roslyn origin/roslyn" # heap-shot |