A few solutions for you:
- You can dock the windows into each other like browser tabs.
- Alt + Tab on windows to change windows
- Try a standalone viewport.
A few solutions for you:
It’s always easier with a duel-monitor setup, but anyways… just for the fun of poking around engine source
You want to look into these two functions:
FSlateApplication::AddWindowAsNativeChild
Windows added with FSlateApplication::AddWindowAsNativeChild will stay on top of its parent window, where those with FSlateApplication::AddWindow can
You can test them out with an “Editor Standalone Window” plugin. After creating the plugin, comment out existing code under F[PluginName]Module::PluginButtonClicked(), then add the following:
FSlateApplication::Get().AddWindowAsNativeChild(SNew(SWindow), FGlobalTabmanager::Get()->GetRootWindow().ToSharedRef());
OR
FSlateApplication::Get().AddWindow(SNew(SWindow));
Hopefully this is enough to get you somewhere.
Thank you so much! It’s what I need exactly!
By the way, today I’m struggling with msb3075. It takes my whole day, and I’m re-installing visual studio now. After this, I will check what you said with hope. Really really thank you.
Fun. The fun is very important to me. I believe that, the fun is important for all of us. Because what we make is about fun.
Thank you for your time:) I use those things already with my work. But, it’s not enough to me:)
Hello. I have short question.
There are two windows, and blueprint editor window is activated. So blueprint editor window is on top.
At this condition, if I click the level editor window, then -
Level editor window is activated, but, still blueprint editor window is on top. Because of this, I can not see large part of level editor window, including PIE viewport.
Why? How can I bring level editor window to top?
I spent lot of time to search about this, in several month, with many search word. Level editor window, PIE window, viewport window, parent window… always on top, blinded by other window… (I found [this][3] from forum, but it does not help for me. [this][4] seems related, but I’m not sure.)
Today, finally, I spent all of day to try to modify unreal engine with source code. It was fun and beneficial for me, but I failed to solve.
This is about my productivity, convenience, and effectiveness. But also, this is about my curiosity, emotion, motivation, confidence, and desire. Because of these, it looks impossible for me to give this up.
I just want to see viewport, with playing in editor, without moving or minimizing the other window. But it looks not easy for me.
In search, I found these too.
Add by edit: Just wondering still now. Why Epic makes like this? is there need related some other feature?
I did it!
What I modified is this: (UE version is 4.23)
From TabManager.cpp ( \Engine\Source\Runtime\Slate\Private\Framework\Docking\TabManager.cpp )
in TSharedRef FTabManager::RestoreArea_Helper()
I found below source,
// Any windows that were "pulled out" of a dock area should be children of the window in which the parent dock area resides.
if (bIsChildWindow)
{
FSlateApplication::Get().AddWindowAsNativeChild( NewWindow, ParentWindow.ToSharedRef() )->SetContent(
SAssignNew( NewDockAreaWidget, SDockingArea, SharedThis(this), NodeAsArea.ToSharedRef() ) .ParentWindow( NewWindow )
);
}
else
{
FSlateApplication::Get().AddWindow( NewWindow )->SetContent(
SAssignNew( NewDockAreaWidget, SDockingArea, SharedThis(this), NodeAsArea.ToSharedRef() ) .ParentWindow( NewWindow )
);
}
And I modified like this: (just copy and past from line under else{ )
// Any windows that were "pulled out" of a dock area should be children of the window in which the parent dock area resides.
if (bIsChildWindow)
{
//FSlateApplication::Get().AddWindowAsNativeChild( NewWindow, ParentWindow.ToSharedRef() )->SetContent(
// SAssignNew( NewDockAreaWidget, SDockingArea, SharedThis(this), NodeAsArea.ToSharedRef() ) .ParentWindow( NewWindow )
//);
FSlateApplication::Get().AddWindow(NewWindow)->SetContent(
SAssignNew(NewDockAreaWidget, SDockingArea, SharedThis(this), NodeAsArea.ToSharedRef()).ParentWindow(NewWindow)
);
}
else
{
FSlateApplication::Get().AddWindow( NewWindow )->SetContent(
SAssignNew( NewDockAreaWidget, SDockingArea, SharedThis(this), NodeAsArea.ToSharedRef() ) .ParentWindow( NewWindow )
);
}
Then it works! How sweet!!! Thank you!
For other people may see this post, I add this comment:
I’m testing what I modified from above, but I’m experiencing some crashes.
If I get something new, I will post agian.
Being a complete noob at unreal engine and no programming experience, as someone with no knowledge, can you explain how to do this like I’m a 4 year old? I would greatly appreciate it!
The solution above from Hyaniner may cause some errors/crashes. The solution below removes a redundancy and unnecessary variable check, has been tested by our dev team, and is stable and fully functional in UE 5.3.2.
Edit \Engine\Source\Runtime\Slate\Private\Framework\Docking\TabManager.cpp
, and replace the following block of code:
// Any windows that were "pulled out" of a dock area should be children of the window in which the parent dock area resides.
if (bIsChildWindow)
{
FSlateApplication::Get().AddWindowAsNativeChild(NewWindow, ParentWindow.ToSharedRef())->SetContent(
SAssignNew(NewDockAreaWidget, SDockingArea, SharedThis(this), NodeAsArea.ToSharedRef()).ParentWindow(NewWindow)
);
}
else
{
FSlateApplication::Get().AddWindow(NewWindow)->SetContent(
SAssignNew(NewDockAreaWidget, SDockingArea, SharedThis(this), NodeAsArea.ToSharedRef()).ParentWindow(NewWindow)
);
}
With this block of code:
// Any windows that were "pulled out" of a dock area should be children of the window in which the parent dock area resides.
// if (bIsChildWindow)
// {
// FSlateApplication::Get().AddWindowAsNativeChild(NewWindow, ParentWindow.ToSharedRef())->SetContent(
// SAssignNew(NewDockAreaWidget, SDockingArea, SharedThis(this), NodeAsArea.ToSharedRef()).ParentWindow(NewWindow)
// );
// }
// else
{
FSlateApplication::Get().AddWindow(NewWindow)->SetContent(
SAssignNew(NewDockAreaWidget, SDockingArea, SharedThis(this), NodeAsArea.ToSharedRef()).ParentWindow(NewWindow)
);
}
Then save the file, and rebuild UGS/Unreal Editor. If you’re not familiar with how to do this, you’ll need to take the time to read up on it and learn, and you’ll need Visual Studio installed if you don’t have it already.
Or, if you’re part of a dev team, you could submit a request to your engineering team to make this change to implement it for everyone on the team.
This change removes the “child window” if/else statement, effectively ignoring the bIsChildWindow
variable, so that any new window functions the same as a regular “parent” window (which is basically the way most other Windows apps function).
cant find this code in 5.5