Browse Source

Made using/pragma fixits no long focus on change

Brian Fiete 5 years ago
parent
commit
709b337617

+ 2 - 2
BeefLibs/Beefy2D/src/theme/dark/DarkEditWidget.bf

@@ -759,7 +759,7 @@ namespace Beefy.theme.dark
             return val;
         }
 
-		public void CheckRecordScrollTop()
+		public void CheckRecordScrollTop(bool force = false)
 		{
 			if (mWantsCheckScrollPosition)
 			{
@@ -784,7 +784,7 @@ namespace Beefy.theme.dark
 				mWantsCheckScrollPosition = false;
 			}
 
-			if (mEditWidget.mHasFocus)
+			if ((mEditWidget.mHasFocus) && (!force))
 			{
 				mTopCharId = -1;
 			}

+ 2 - 2
BeefLibs/Beefy2D/src/widgets/EditWidget.bf

@@ -941,8 +941,8 @@ namespace Beefy.widgets
 		{
 #unwarn
 			int cursorPos = CursorTextPos;
-			if (mCursorTextPos >= index)
-				mCursorTextPos = Math.Clamp(mCursorTextPos + (int32)ofs, 0, mData.mTextLength + 1);
+			if (cursorPos >= index)
+				CursorTextPos = Math.Clamp(mCursorTextPos + (int32)ofs, 0, mData.mTextLength + 1);
 			if (HasSelection())
 			{				
 				if (((ofs > 0) && (mSelection.Value.mStartPos >= index)) ||

+ 24 - 3
IDE/src/ui/AutoComplete.bf

@@ -2287,17 +2287,22 @@ namespace IDE.ui
 				return;
 			}
 
+			var targetSourceEditWidgetContent = mTargetEditWidget.Content as SourceEditWidgetContent;
+			var sourceEditWidgetContent = targetSourceEditWidgetContent;
+			var prevCursorPosition = sourceEditWidgetContent.CursorTextPos;
+			var prevScrollPos = mTargetEditWidget.mVertPos.mDest;
+
 			UndoBatchStart undoBatchStart = null;
 
 			var parts = String.StackSplit!(data, '|');
+			String fixitKind = parts[0];
 			String fixitFileName = parts[1];
 			SourceViewPanel sourceViewPanel = IDEApp.sApp.ShowSourceFile(fixitFileName);
+			bool focusChange = !fixitKind.StartsWith(".");
 
-			var targetSourceEditWidgetContent = mTargetEditWidget.Content as SourceEditWidgetContent;
 			var historyEntry = targetSourceEditWidgetContent.RecordHistoryLocation();
 			historyEntry.mNoMerge = true;
 
-			var sourceEditWidgetContent = targetSourceEditWidgetContent;
 			if (sourceEditWidgetContent.mSourceViewPanel != sourceViewPanel)
 			{
 				sourceEditWidgetContent = (SourceEditWidgetContent)sourceViewPanel.GetActivePanel().EditWidget.mEditWidgetContent;
@@ -2305,6 +2310,11 @@ namespace IDE.ui
 				sourceEditWidgetContent.mData.mUndoManager.Add(undoBatchStart);
 			}
 
+			if (!focusChange)
+			{
+				sourceEditWidgetContent.CheckRecordScrollTop(true);
+			}
+
 			int32 fixitIdx = 0;
 			int32 fixitLen = 0;
 			StringView fixitLocStr = parts[2];
@@ -2325,6 +2335,8 @@ namespace IDE.ui
 			else
 				fixitIdx = int32.Parse(fixitLocStr).GetValueOrDefault();
 
+			int prevTextLength = sourceEditWidgetContent.mData.mTextLength;
+
 			int insertCount = 0;
 			int dataIdx = 3;
 
@@ -2358,7 +2370,8 @@ namespace IDE.ui
 					}
 	
 					sourceEditWidgetContent.CursorTextPos = fixitIdx;
-					sourceEditWidgetContent.EnsureCursorVisible(true, true);
+					if (focusChange)
+						sourceEditWidgetContent.EnsureCursorVisible(true, true);
 
 					if (fixitLen > 0)
 					{
@@ -2377,6 +2390,14 @@ namespace IDE.ui
 				}
 			}
 
+			if (!focusChange)
+			{
+				mTargetEditWidget.VertScrollTo(prevScrollPos, true);
+				sourceEditWidgetContent.CursorTextPos = prevCursorPosition;
+				int addedSize = sourceEditWidgetContent.mData.mTextLength - prevTextLength;
+				sourceEditWidgetContent.[Friend]AdjustCursorsAfterExternalEdit(fixitIdx, addedSize);
+			}
+
 			if (historyEntry != null)
 			{
 				// Make sure when we go back that we'll go back to the insert position

+ 1 - 1
IDEHelper/Compiler/BfAutoComplete.cpp

@@ -3267,7 +3267,7 @@ void BfAutoComplete::FixitAddNamespace(BfAstNode* refNode, const StringImpl& nam
 
 	BfUsingFinder usingFinder;
 	usingFinder.VisitMembers(refNode->GetSourceData()->mRootNode);
-	AddEntry(AutoCompleteEntry("fixit", StrFormat("using %s;\tusing|%s|%d||using %s;", namespaceStr.c_str(), parserData->mFileName.c_str(),
+	AddEntry(AutoCompleteEntry("fixit", StrFormat("using %s;\t.using|%s|%d||using %s;", namespaceStr.c_str(), parserData->mFileName.c_str(),
 		usingFinder.mLastIdx, namespaceStr.c_str()).c_str()));
 }
 

+ 1 - 1
IDEHelper/Compiler/BfModule.cpp

@@ -2888,7 +2888,7 @@ BfError* BfModule::Warn(int warningNum, const StringImpl& warning, BfAstNode* re
 
 				if (warningNum != 0)
 				{
-					mCompiler->mResolvePassData->mAutoComplete->AddEntry(AutoCompleteEntry("fixit", StrFormat("#pragma warning disable %d\tusing|%s|%d||#pragma warning disable %d", 
+					mCompiler->mResolvePassData->mAutoComplete->AddEntry(AutoCompleteEntry("fixit", StrFormat("#pragma warning disable %d\t.pragma|%s|%d||#pragma warning disable %d", 
 						warningNum, parser->mFileName.c_str(), 0, warningNum).c_str()));
 				}
 			}			

+ 1 - 1
IDEHelper/Compiler/BfModuleTypeUtils.cpp

@@ -7356,7 +7356,7 @@ void BfModule::CheckTypeRefFixit(BfAstNode* typeRef, const char* appendName)
 		{
 			BfParserData* parser = typeRef->GetSourceData()->ToParserData();
 			if (parser != NULL)
-				mCompiler->mResolvePassData->mAutoComplete->AddEntry(AutoCompleteEntry("fixit", StrFormat("using %s;\tusing|%s|%d||using %s;", namespaceStr.c_str(), parser->mFileName.c_str(), usingFinder.mLastIdx, namespaceStr.c_str()).c_str()));
+				mCompiler->mResolvePassData->mAutoComplete->AddEntry(AutoCompleteEntry("fixit", StrFormat("using %s;\t.using|%s|%d||using %s;", namespaceStr.c_str(), parser->mFileName.c_str(), usingFinder.mLastIdx, namespaceStr.c_str()).c_str()));
 		}
 	}
 }