diff --git a/internal_client.cpp b/internal_client.cpp index bfecdd8c7..29335871e 100644 --- a/internal_client.cpp +++ b/internal_client.cpp @@ -211,6 +211,11 @@ bool InternalClient::isResizable() const return true; } +bool InternalClient::isPlaceable() const +{ + return !(m_internalWindowFlags & Qt::BypassWindowManagerHint) && !(m_internalWindowFlags & Qt::Popup); +} + bool InternalClient::noBorder() const { return m_userNoBorder || m_internalWindowFlags.testFlag(Qt::FramelessWindowHint) || m_internalWindowFlags.testFlag(Qt::Popup); diff --git a/internal_client.h b/internal_client.h index f718a27df..7433c70b0 100644 --- a/internal_client.h +++ b/internal_client.h @@ -45,6 +45,7 @@ public: bool isMovable() const override; bool isMovableAcrossScreens() const override; bool isResizable() const override; + bool isPlaceable() const override; bool noBorder() const override; bool userCanSetNoBorder() const override; bool wantsInput() const override; diff --git a/workspace.cpp b/workspace.cpp index a87a622e9..f8018f186 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -1810,8 +1810,9 @@ void Workspace::addInternalClient(InternalClient *client) setupClientConnections(client); client->updateLayer(); - if (client->isDecorated()) { - client->keepInArea(clientArea(FullScreenArea, client)); + if (client->isPlaceable()) { + const QRect area = clientArea(PlacementArea, screens()->current(), client->desktop()); + client->placeIn(area); } markXStackingOrderAsDirty();