Add Window.IsAlwaysOnTop property
This commit is contained in:
@@ -164,6 +164,15 @@ void WindowBase::SetIsVisible(bool isVisible)
|
||||
}
|
||||
}
|
||||
|
||||
bool WindowBase::IsAlwaysOnTop() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void WindowBase::SetIsAlwaysOnTop(bool isAlwaysOnTop)
|
||||
{
|
||||
}
|
||||
|
||||
String WindowBase::ToString() const
|
||||
{
|
||||
return GetTitle();
|
||||
|
||||
@@ -157,6 +157,17 @@ public:
|
||||
return _maximized;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value that indicates whether a window is always on top of other windows.
|
||||
/// </summary>
|
||||
API_PROPERTY() virtual bool IsAlwaysOnTop() const;
|
||||
|
||||
/// <summary>
|
||||
/// Sets a value that indicates whether a window is always on top of other windows.
|
||||
/// </summary>
|
||||
/// <param name="isAlwaysOnTop">True if always on top.</param>
|
||||
API_PROPERTY() virtual void SetIsAlwaysOnTop(bool isAlwaysOnTop);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the native window handle.
|
||||
/// </summary>
|
||||
|
||||
@@ -306,7 +306,8 @@ void SDLPlatform::Tick()
|
||||
draggedWindow->HandleEvent(buttonUpEvent);
|
||||
//SDL_PushEvent(&buttonUpEvent);
|
||||
|
||||
SDL_SetWindowAlwaysOnTop(draggedWindow->GetSDLWindow(), false);
|
||||
if (!draggedWindow->GetSettings().IsTopmost)
|
||||
draggedWindow->SetIsAlwaysOnTop(false);
|
||||
draggedWindow->BringToFront();
|
||||
|
||||
draggedWindow = nullptr;
|
||||
|
||||
@@ -825,7 +825,7 @@ void SDLWindow::Show()
|
||||
|
||||
// Reused top-most windows (DockHintWindow) doesn't stay on top for some reason
|
||||
if (_settings.IsTopmost && _settings.Type != WindowType::Tooltip)
|
||||
SDL_SetWindowAlwaysOnTop(_window, true);
|
||||
SetIsAlwaysOnTop(true);
|
||||
|
||||
if (_isTrackingMouse)
|
||||
{
|
||||
@@ -1051,12 +1051,25 @@ void SDLWindow::SetIsFullscreen(bool isFullscreen)
|
||||
if (!isFullscreen)
|
||||
{
|
||||
// The window is set to always-on-top for some reason when leaving fullscreen
|
||||
SDL_SetWindowAlwaysOnTop(_window, false);
|
||||
SetIsAlwaysOnTop(false);
|
||||
}
|
||||
|
||||
WindowBase::SetIsFullscreen(isFullscreen);
|
||||
}
|
||||
|
||||
bool SDLWindow::IsAlwaysOnTop() const
|
||||
{
|
||||
SDL_WindowFlags flags = SDL_GetWindowFlags(_window);
|
||||
return (flags & SDL_WINDOW_ALWAYS_ON_TOP) != 0;
|
||||
}
|
||||
|
||||
void SDLWindow::SetIsAlwaysOnTop(bool isAlwaysOnTop)
|
||||
{
|
||||
if (!SDL_SetWindowAlwaysOnTop(_window, isAlwaysOnTop))
|
||||
LOG(Warning, "SDL_SetWindowAlwaysOnTop failed: {0}", String(SDL_GetError()));
|
||||
// Not sure if this should change _settings.IsTopmost to reflect the new value?
|
||||
}
|
||||
|
||||
Float2 SDLWindow::GetPosition() const
|
||||
{
|
||||
Int2 topLeftBorder;
|
||||
@@ -1332,7 +1345,7 @@ DragDropEffect SDLWindow::DoDragDrop(const StringView& data, const Float2& offse
|
||||
else
|
||||
#endif
|
||||
{
|
||||
SDL_SetWindowAlwaysOnTop(_window, true);
|
||||
SetIsAlwaysOnTop(true);
|
||||
Show();
|
||||
|
||||
//draggingActive = true;
|
||||
|
||||
@@ -91,6 +91,8 @@ public:
|
||||
void SetPosition(const Float2& position) override;
|
||||
void SetClientPosition(const Float2& position) override;
|
||||
void SetIsFullscreen(bool isFullscreen) override;
|
||||
bool IsAlwaysOnTop() const override;
|
||||
void SetIsAlwaysOnTop(bool isAlwaysOnTop) override;
|
||||
Float2 GetPosition() const override;
|
||||
Float2 GetSize() const override;
|
||||
Float2 GetClientSize() const override;
|
||||
|
||||
Reference in New Issue
Block a user