diff --git a/kstyle/breezewindowmanager.cpp b/kstyle/breezewindowmanager.cpp index 7c75b8d4..a9ad7eec 100644 --- a/kstyle/breezewindowmanager.cpp +++ b/kstyle/breezewindowmanager.cpp @@ -76,6 +76,11 @@ #include +#if QT_VERSION >= 0x050300 +// needed to deal with device pixel ratio +#include +#endif + #if BREEZE_HAVE_X11 #include #endif @@ -389,7 +394,7 @@ namespace Breeze if( _dragAboutToStart ) { - if( mouseEvent->globalPos() == _globalDragPoint ) + if( mouseEvent->pos() == _dragPoint ) { // start timer, _dragAboutToStart = false; @@ -740,6 +745,16 @@ namespace Breeze // window const WId window( widget->window()->winId() ); + #if QT_VERSION >= 0x050300 + qreal dpiRatio = 1; + QWindow* windowHandle = widget->window()->windowHandle(); + if( windowHandle ) dpiRatio = windowHandle->devicePixelRatio(); + else dpiRatio = qApp->devicePixelRatio(); + dpiRatio = qApp->devicePixelRatio(); + #else + const qreal dpiRatio = 1; + #endif + // from bespin/virtuality xcb_button_release_event_t releaseEvent; memset(&releaseEvent, 0, sizeof(releaseEvent)); @@ -748,10 +763,10 @@ namespace Breeze releaseEvent.event = window; releaseEvent.child = XCB_WINDOW_NONE; releaseEvent.root = QX11Info::appRootWindow(); - releaseEvent.event_x = _dragPoint.x(); - releaseEvent.event_y = _dragPoint.y(); - releaseEvent.root_x = position.x(); - releaseEvent.root_y = position.y(); + releaseEvent.event_x = _dragPoint.x()*dpiRatio; + releaseEvent.event_y = _dragPoint.y()*dpiRatio; + releaseEvent.root_x = position.x()*dpiRatio; + releaseEvent.root_y = position.y()*dpiRatio; releaseEvent.detail = XCB_BUTTON_INDEX_1; releaseEvent.state = XCB_BUTTON_MASK_1; releaseEvent.time = XCB_CURRENT_TIME; @@ -768,8 +783,8 @@ namespace Breeze clientMessageEvent.format = 32; clientMessageEvent.window = window; clientMessageEvent.type = _moveResizeAtom; - clientMessageEvent.data.data32[0] = position.x(); - clientMessageEvent.data.data32[1] = position.y(); + clientMessageEvent.data.data32[0] = position.x()*dpiRatio; + clientMessageEvent.data.data32[1] = position.y()*dpiRatio; clientMessageEvent.data.data32[2] = 8; // NET::Move clientMessageEvent.data.data32[3] = XCB_KEY_BUT_MASK_BUTTON_1; xcb_send_event( connection, false, QX11Info::appRootWindow(),