diff --git a/placement.cpp b/placement.cpp --- a/placement.cpp +++ b/placement.cpp @@ -74,6 +74,8 @@ placeOnScreenDisplay(c, area); else if (c->isTransient() && c->hasTransientPlacementHint()) placeTransient(c); + else if (c->isTransient() && c->surface()) + placeDialog(c, area, options->placement()); else place(c, area, options->placement()); } diff --git a/shell_client.cpp b/shell_client.cpp --- a/shell_client.cpp +++ b/shell_client.cpp @@ -1574,7 +1574,8 @@ bool ShellClient::hasTransientPlacementHint() const { - return isTransient() && transientFor() != nullptr; + return isTransient() && transientFor() != nullptr && + (m_shellSurface || m_xdgShellPopup); } QPoint ShellClient::transientPlacementHint() const