xcb: Fix drag and drop between xcb screens
Set the proper screen before creating a shaped pixmap window in QBasicDrag::startDrag(). Grab mouse again when D&D window is recreated. Task-number: QTBUG-51215 Change-Id: I5cb47d3b11672b56d17b32072d84a722bdcdcd9a Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>bb10
parent
4889269ff0
commit
78ad8f208d
|
|
@ -88,7 +88,8 @@ static QWindow* topLevelAt(const QPoint &pos)
|
|||
QBasicDrag::QBasicDrag() :
|
||||
m_restoreCursor(false), m_eventLoop(0),
|
||||
m_executed_drop_action(Qt::IgnoreAction), m_can_drop(false),
|
||||
m_drag(0), m_drag_icon_window(0), m_useCompositing(true)
|
||||
m_drag(0), m_drag_icon_window(0), m_useCompositing(true),
|
||||
m_screen(Q_NULLPTR)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -211,7 +212,7 @@ void QBasicDrag::startDrag()
|
|||
pos = QPoint();
|
||||
}
|
||||
#endif
|
||||
recreateShapedPixmapWindow(Q_NULLPTR, pos);
|
||||
recreateShapedPixmapWindow(m_screen, pos);
|
||||
enableEventFilter();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -90,6 +90,8 @@ protected:
|
|||
bool useCompositing() const { return m_useCompositing; }
|
||||
void setUseCompositing(bool on) { m_useCompositing = on; }
|
||||
|
||||
void setScreen(QScreen *screen) { m_screen = screen; }
|
||||
|
||||
Qt::DropAction executedDropAction() const { return m_executed_drop_action; }
|
||||
void setExecutedDropAction(Qt::DropAction da) { m_executed_drop_action = da; }
|
||||
|
||||
|
|
@ -108,6 +110,7 @@ private:
|
|||
QDrag *m_drag;
|
||||
QShapedPixmapWindow *m_drag_icon_window;
|
||||
bool m_useCompositing;
|
||||
QScreen *m_screen;
|
||||
};
|
||||
|
||||
class Q_GUI_EXPORT QSimpleDrag : public QBasicDrag
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@ void QXcbDrag::startDrag()
|
|||
XCB_ATOM_ATOM, 32, drag_types.size(), (const void *)drag_types.constData());
|
||||
|
||||
setUseCompositing(current_virtual_desktop->compositingActive());
|
||||
setScreen(current_virtual_desktop->screens().constFirst()->screen());
|
||||
QBasicDrag::startDrag();
|
||||
if (connection()->mouseGrabber() == Q_NULLPTR)
|
||||
shapedPixmapWindow()->setMouseGrabEnabled(true);
|
||||
|
|
@ -322,6 +323,9 @@ void QXcbDrag::move(const QPoint &globalPos)
|
|||
if (virtualDesktop != current_virtual_desktop) {
|
||||
setUseCompositing(virtualDesktop->compositingActive());
|
||||
recreateShapedPixmapWindow(static_cast<QPlatformScreen*>(screen)->screen(), deviceIndependentPos);
|
||||
if (connection()->mouseGrabber() == Q_NULLPTR)
|
||||
shapedPixmapWindow()->setMouseGrabEnabled(true);
|
||||
|
||||
current_virtual_desktop = virtualDesktop;
|
||||
} else {
|
||||
QBasicDrag::moveShapedPixmapWindow(deviceIndependentPos);
|
||||
|
|
|
|||
Loading…
Reference in New Issue