@@ -89,8 +89,32 @@ void MousePointer::itemChange(ItemChange change, const ItemChangeData &value)
90void MousePointer::registerWindow(QWindow *window)
90void MousePointer::registerWindow(QWindow *window)
92+ if (window == m_registeredWindow) {
96+ if (m_registeredWindow) {
97+ m_registeredWindow->disconnect(this);
92− if (m_registeredWindow && window != m_registeredWindow) {
100+ m_registeredWindow = window;
102+ if (m_registeredWindow) {
103+ connect(window, &QWindow::screenChanged, this, &MousePointer::registerScreen);
104+ registerScreen(window->screen());
106+ registerScreen(nullptr);
110+void MousePointer::registerScreen(QScreen *screen)
112+ if (m_registeredScreen == screen) {
116+ if (m_registeredScreen) {
93− auto previousCursor = dynamic_cast<MirPlatformCursor*>(m_registeredWindow->screen()->handle()->cursor());
117+ auto previousCursor = dynamic_cast<MirPlatformCursor*>(m_registeredScreen->handle()->cursor());
94 if (previousCursor) {
118 if (previousCursor) {
95 previousCursor->setMousePointer(nullptr);
119 previousCursor->setMousePointer(nullptr);
@@ -98,10 +122,10 @@ void MousePointer::registerWindow(QWindow *window)
101− m_registeredWindow = window;
125+ m_registeredScreen = screen;
103− if (m_registeredWindow) {
127+ if (m_registeredScreen) {
104− auto cursor = dynamic_cast<MirPlatformCursor*>(window->screen()->handle()->cursor());
128+ auto cursor = dynamic_cast<MirPlatformCursor*>(m_registeredScreen->handle()->cursor());
105 if (cursor) {
129 if (cursor) {
106 cursor->setMousePointer(this);
130 cursor->setMousePointer(this);