diff --git a/IDE/src/IDEApp.bf b/IDE/src/IDEApp.bf index 103c65fd..dc719197 100644 --- a/IDE/src/IDEApp.bf +++ b/IDE/src/IDEApp.bf @@ -2314,6 +2314,11 @@ namespace IDE widget.RemoveSelf(); } + WithSourceViewPanels(scope (sourceViewPanel) => + { + sourceViewPanel.Dispose(); + }); + if (!mRunningTestScript) { mActiveDocumentsTabbedView = null; @@ -5712,14 +5717,20 @@ namespace IDE { let sewc = editWidget.mEditWidgetContent as SourceEditWidgetContent; if (sewc != null) - return sewc; + { + if (sewc.mEditWidget.mHasFocus) + return sewc; + return null; + } } } var activeTextPanel = GetActivePanel() as TextPanel; if (activeTextPanel != null) { - return activeTextPanel.EditWidget.mEditWidgetContent as SourceEditWidgetContent; + let sewc = activeTextPanel.EditWidget.mEditWidgetContent as SourceEditWidgetContent; + if ((sewc != null) && (sewc.mEditWidget.mHasFocus)) + return sewc; } return null; diff --git a/IDE/src/ui/OutputPanel.bf b/IDE/src/ui/OutputPanel.bf index e99e10a6..a60696f8 100644 --- a/IDE/src/ui/OutputPanel.bf +++ b/IDE/src/ui/OutputPanel.bf @@ -139,7 +139,8 @@ namespace IDE.ui mOutputWidget.SetText(""); for (var widgetEntry in mInlineWidgets) { - widgetEntry.mWidget.RemoveSelf(); + if (widgetEntry.mWidget.mParent != null) + widgetEntry.mWidget.RemoveSelf(); delete widgetEntry.mWidget; } mInlineWidgets.Clear(); diff --git a/IDE/src/ui/SourceEditWidgetContent.bf b/IDE/src/ui/SourceEditWidgetContent.bf index dbb19ef7..1a91924f 100644 --- a/IDE/src/ui/SourceEditWidgetContent.bf +++ b/IDE/src/ui/SourceEditWidgetContent.bf @@ -2275,6 +2275,9 @@ namespace IDE.ui public void DuplicateLine() { + if ((CheckReadOnly()) || (!mAllowVirtualCursor)) + return; + UndoBatchStart undoBatchStart = new UndoBatchStart("duplicateLine"); mData.mUndoManager.Add(undoBatchStart); diff --git a/IDE/src/ui/SourceViewPanel.bf b/IDE/src/ui/SourceViewPanel.bf index 6e814b31..c1d98643 100644 --- a/IDE/src/ui/SourceViewPanel.bf +++ b/IDE/src/ui/SourceViewPanel.bf @@ -546,11 +546,6 @@ namespace IDE.ui public ~this() { - if (mProjectSource?.mEditData?.HasTextChanged() == true) - { - mProjectSource.ClearEditData(); - } - if (mInPostRemoveUpdatePanels) { //Debug.WriteLine("Removing sourceViewPanel from mPostRemoveUpdatePanel {0} in ~this ", this); @@ -1185,7 +1180,7 @@ namespace IDE.ui //if (mCurParser != null) { if (gApp.mWorkspace.mProjectLoadState != .Loaded) - return false; + return true; if (!isHi) Debug.Assert(!mIsPerformingBackgroundClassify); @@ -2333,6 +2328,11 @@ namespace IDE.ui if (mDisposed) return; + if (mProjectSource?.mEditData?.HasTextChanged() == true) + { + mProjectSource.ClearEditData(); + } + ProcessDeferredResolveResults(-1); if (IDEApp.sApp.mLastActiveSourceViewPanel == this)