@@ -89,8 +89,32 @@ void MousePointer::itemChange(ItemChange change, const ItemChangeData &value)
8989
9090void MousePointer::registerWindow(QWindow *window)
9191{
92− if (m_registeredWindow && window != m_registeredWindow) {
93− auto previousCursor = dynamic_cast<MirPlatformCursor*>(m_registeredWindow->screen()->handle()->cursor());
92+ if (window == m_registeredWindow) {
93+ return;
94+ }
95+
96+ if (m_registeredWindow) {
97+ m_registeredWindow->disconnect(this);
98+ }
99+
100+ m_registeredWindow = window;
101+
102+ if (m_registeredWindow) {
103+ connect(window, &QWindow::screenChanged, this, &MousePointer::registerScreen);
104+ registerScreen(window->screen());
105+ } else {
106+ registerScreen(nullptr);
107+ }
108+}
109+
110+void MousePointer::registerScreen(QScreen *screen)
111+{
112+ if (m_registeredScreen == screen) {
113+ return;
114+ }
115+
116+ if (m_registeredScreen) {
117+ auto previousCursor = dynamic_cast<MirPlatformCursor*>(m_registeredScreen->handle()->cursor());
94118 if (previousCursor) {
95119 previousCursor->setMousePointer(nullptr);
96120 } else {
@@ -98,10 +122,10 @@ void MousePointer::registerWindow(QWindow *window)
98122 }
99123 }
100124
101− m_registeredWindow = window;
125+ m_registeredScreen = screen;
102126
103− if (m_registeredWindow) {
104− auto cursor = dynamic_cast<MirPlatformCursor*>(window->screen()->handle()->cursor());
127+ if (m_registeredScreen) {
128+ auto cursor = dynamic_cast<MirPlatformCursor*>(m_registeredScreen->handle()->cursor());
105129 if (cursor) {
106130 cursor->setMousePointer(this);
107131 } else {