diff --git a/BeefLibs/Beefy2D/src/widgets/TabbedView.bf b/BeefLibs/Beefy2D/src/widgets/TabbedView.bf index 104c80be..6390159b 100644 --- a/BeefLibs/Beefy2D/src/widgets/TabbedView.bf +++ b/BeefLibs/Beefy2D/src/widgets/TabbedView.bf @@ -313,7 +313,7 @@ namespace Beefy.widgets else { // Create new tabbed view to put this in - TabbedView tabbedView = ThemeFactory.mDefault.CreateTabbedView(mTabbedView.mSharedData); + TabbedView tabbedView = mTabbedView.CreateTabbedView(mTabbedView.mSharedData); //tabbedView.mSharedData = mTabbedView.mSharedData.Ref(); //tabbedView.mSharedData.mOpenNewWindowDelegate = mTabbedView.mSharedData.mOpenNewWindowDelegate; tabbedView.SetRequestedSize(mTabbedView.mWidth, mTabbedView.mHeight); @@ -385,6 +385,11 @@ namespace Beefy.widgets Widget.RemoveAndDelete(tab); } + public virtual TabbedView CreateTabbedView(TabbedView.SharedData sharedData) + { + return ThemeFactory.mDefault.CreateTabbedView(sharedData); + } + public void Closed() { mSharedData.mTabbedViewClosed(this); diff --git a/IDE/src/Commands.bf b/IDE/src/Commands.bf index c7aed956..63fc9b07 100644 --- a/IDE/src/Commands.bf +++ b/IDE/src/Commands.bf @@ -105,7 +105,8 @@ namespace IDE { None = 0, MainWindow = 1, - Editor = 2, + WorkWindow = 2, + Editor = 4, } public String mName ~ delete _; @@ -159,7 +160,7 @@ namespace IDE }; public CommandMap mKeyMap = new .() ~ delete _; - void Add(StringView name, Action act, IDECommand.ContextFlags contextFlags = .MainWindow) + void Add(StringView name, Action act, IDECommand.ContextFlags contextFlags = .WorkWindow) { let cmd = new IDECommand(); cmd.mName = new String(name); diff --git a/IDE/src/IDEApp.bf b/IDE/src/IDEApp.bf index ba1c6430..9d486683 100644 --- a/IDE/src/IDEApp.bf +++ b/IDE/src/IDEApp.bf @@ -90,11 +90,30 @@ namespace IDE public class IDETabbedView : DarkTabbedView { + public this(SharedData sharedData) : base(sharedData) + { + if (sharedData == null) + { + mSharedData.mOpenNewWindowDelegate.Add(new (fromTabbedView, newWindow) => gApp.SetupNewWindow(newWindow, true)); + mSharedData.mTabbedViewClosed.Add(new (tabbedView) => + { + if (tabbedView == gApp.mActiveDocumentsTabbedView) + gApp.mActiveDocumentsTabbedView = null; + }); + } + } + public ~this() { if (gApp.mActiveDocumentsTabbedView == this) gApp.mActiveDocumentsTabbedView = null; } + + public override TabbedView CreateTabbedView(SharedData sharedData) + { + IDETabbedView tabbedView = new IDETabbedView(sharedData); + return tabbedView; + } } public class IDEApp : BFApp @@ -3396,8 +3415,15 @@ namespace IDE nextTabbedView = firstTabbedView; if (nextTabbedView != null) { + if (!nextTabbedView.mWidgetWindow.mHasFocus) + nextTabbedView.mWidgetWindow.SetForeground(); var activeTab = nextTabbedView.GetActiveTab(); activeTab.Activate(); + + if (let sourceViewPanel = activeTab.mContent as SourceViewPanel) + { + sourceViewPanel.HilitePosition(.Always); + } } } @@ -5151,14 +5177,7 @@ namespace IDE IDETabbedView CreateTabbedView() { - var tabbedView = new IDETabbedView(); - tabbedView.mSharedData.mOpenNewWindowDelegate.Add(new (fromTabbedView, newWindow) => SetupNewWindow(newWindow, true)); - tabbedView.mSharedData.mTabbedViewClosed.Add(new (tabbedView) => - { - if (tabbedView == mActiveDocumentsTabbedView) - mActiveDocumentsTabbedView = null; - }); - return tabbedView; + return new IDETabbedView(null); } public void SetupNewWindow(WidgetWindow window, bool isMainWindow) @@ -6935,6 +6954,7 @@ namespace IDE IDECommand.ContextFlags useFlags = .None; var activeWindow = GetActiveWindow(); bool isMainWindow = activeWindow.mRootWidget is MainFrame; + bool isWorkWindow = isMainWindow || (activeWindow.mRootWidget is DarkDockingFrame); var activePanel = GetActivePanel() as Panel; if (activePanel is SourceViewPanel) @@ -6944,6 +6964,8 @@ namespace IDE if (isMainWindow) useFlags |= .MainWindow; + if (isWorkWindow) + useFlags |= .WorkWindow; if (evt.mKeyCode == .Tab) { @@ -6989,6 +7011,8 @@ namespace IDE matches |= useFlags.HasFlag(.Editor); if (checkCommand.mContextFlags.HasFlag(.MainWindow)) matches |= useFlags.HasFlag(.MainWindow); + if (checkCommand.mContextFlags.HasFlag(.WorkWindow)) + matches |= useFlags.HasFlag(.WorkWindow); if (matches) { @@ -12171,6 +12195,14 @@ namespace IDE } } + if ((mFileChangedDialog != null) && (mFileChangedDialog.mDialogKind == .Deleted)) + { + for (let fileName in mFileChangedDialog.mFileNames) + { + mFileWatcher.RemoveChangedFile(fileName); + } + } + while (/*(appHasFocus) && */((mFileChangedDialog == null) || (mFileChangedDialog.mClosed))) { while (mExternalChangeDeferredOpen.Count > 0)