diff --git a/x11client.h b/x11client.h --- a/x11client.h +++ b/x11client.h @@ -89,6 +89,7 @@ xcb_window_t inputId() const { return m_decoInputExtent; } xcb_window_t frameId() const override; + QRect inputGeometry() const override; QRect bufferGeometry() const override; QMargins bufferMargins() const override; @@ -98,6 +99,8 @@ QSize clientSizeToFrameSize(const QSize &size) const override; QRect frameRectToBufferRect(const QRect &rect) const; + QMatrix4x4 inputTransformation() const override; + bool isTransient() const override; bool groupTransient() const override; bool wasOriginallyGroupTransient() const; diff --git a/x11client.cpp b/x11client.cpp --- a/x11client.cpp +++ b/x11client.cpp @@ -2634,6 +2634,15 @@ return m_frame; } +QRect X11Client::inputGeometry() const +{ + // Remember that the buffer geometry corresponds to the geometry of the frame window. + if (isDecorated()) { + return m_bufferGeometry + decoration()->resizeOnlyBorders(); + } + return m_bufferGeometry; +} + QRect X11Client::bufferGeometry() const { return m_bufferGeometry; @@ -2716,6 +2725,13 @@ return frameRectToClientRect(rect); } +QMatrix4x4 X11Client::inputTransformation() const +{ + QMatrix4x4 matrix; + matrix.translate(-m_bufferGeometry.x(), -m_bufferGeometry.y()); + return matrix; +} + Xcb::Property X11Client::fetchShowOnScreenEdge() const { return Xcb::Property(false, window(), atoms->kde_screen_edge_show, XCB_ATOM_CARDINAL, 0, 1);