summaryrefslogtreecommitdiff
path: root/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp')
-rw-r--r--src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index 6a4acf86..6303fbc9 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -45,7 +45,7 @@ QWaylandXdgSurface::Toplevel::~Toplevel()
void QWaylandXdgSurface::Toplevel::applyConfigure()
{
if (!(m_applied.states & (Qt::WindowMaximized|Qt::WindowFullScreen)))
- m_normalSize = m_xdgSurface->m_window->windowFrameGeometry().size();
+ m_normalSize = m_xdgSurface->m_window->windowContentGeometry().size();
if ((m_pending.states & Qt::WindowActive) && !(m_applied.states & Qt::WindowActive)
&& !m_xdgSurface->m_window->display()->isKeyboardAvailable())
@@ -88,7 +88,7 @@ void QWaylandXdgSurface::Toplevel::applyConfigure()
}
if (!surfaceSize.isEmpty())
- m_xdgSurface->m_window->resizeFromApplyConfigure(surfaceSize);
+ m_xdgSurface->m_window->resizeFromApplyConfigure(surfaceSize.grownBy(m_xdgSurface->m_window->windowContentMargins()));
m_applied = m_pending;
qCDebug(lcQpaWayland) << "Applied pending xdg_toplevel configure event:" << m_applied.size << m_applied.states;
@@ -446,18 +446,17 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent)
auto positioner = new QtWayland::xdg_positioner(m_shell->create_positioner());
// set_popup expects a position relative to the parent
- QPoint topLeftMargins = QPoint(m_window->customMargins().left(), m_window->customMargins().top());
- QPoint parentMargins = QPoint(parent->customMargins().left(), parent->customMargins().top());
- QPoint transientPos = m_window->geometry().topLeft() + topLeftMargins; // this is absolute
- transientPos -= parent->geometry().topLeft() + parentMargins;
- if (parent->decoration()) {
- transientPos.setX(transientPos.x() + parent->decoration()->margins(QWaylandAbstractDecoration::ShadowsExcluded).left());
- transientPos.setY(transientPos.y() + parent->decoration()->margins(QWaylandAbstractDecoration::ShadowsExcluded).top());
- }
+ QRect windowGeometry = m_window->windowContentGeometry();
+ QMargins windowMargins = m_window->windowContentMargins() - m_window->clientSideMargins();
+ QMargins parentMargins = parent->windowContentMargins() - parent->clientSideMargins();
+ QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
+ transientPos += QPoint(windowMargins.left(), windowMargins.top());
+ transientPos -= parent->geometry().topLeft();
+ transientPos -= QPoint(parentMargins.left(), parentMargins.top());
positioner->set_anchor_rect(transientPos.x(), transientPos.y(), 1, 1);
positioner->set_anchor(QtWayland::xdg_positioner::anchor_top_left);
positioner->set_gravity(QtWayland::xdg_positioner::gravity_bottom_right);
- positioner->set_size(m_window->windowContentGeometry().width(), m_window->windowContentGeometry().height());
+ positioner->set_size(windowGeometry.width(), windowGeometry.height());
positioner->set_constraint_adjustment(QtWayland::xdg_positioner::constraint_adjustment_slide_x
| QtWayland::xdg_positioner::constraint_adjustment_slide_y);
m_popup = new Popup(this, parent, positioner);