| @@ -998,6 +998,7 @@ namespace PixmapHelpers | |||||
| GC gc = XCreateGC (display, pixmap, 0, nullptr); | GC gc = XCreateGC (display, pixmap, 0, nullptr); | ||||
| XPutImage (display, pixmap, gc, ximage, 0, 0, 0, 0, width, height); | XPutImage (display, pixmap, gc, ximage, 0, 0, 0, 0, width, height); | ||||
| XFreeGC (display, gc); | XFreeGC (display, gc); | ||||
| XFree (ximage); | |||||
| return pixmap; | return pixmap; | ||||
| } | } | ||||
| @@ -4044,6 +4045,8 @@ void MouseCursor::deleteMouseCursor (void* cursorHandle, bool) | |||||
| if (auto display = xDisplay.display) | if (auto display = xDisplay.display) | ||||
| { | { | ||||
| ScopedXLock xlock (display); | ScopedXLock xlock (display); | ||||
| cursorMap.erase ((Cursor) cursorHandle); | |||||
| XFreeCursor (display, (Cursor) cursorHandle); | XFreeCursor (display, (Cursor) cursorHandle); | ||||
| } | } | ||||
| } | } | ||||
| @@ -4113,16 +4116,18 @@ void MouseCursor::showInWindow (ComponentPeer* peer) const | |||||
| { | { | ||||
| ScopedXDisplay xDisplay; | ScopedXDisplay xDisplay; | ||||
| if (cursorHandle != nullptr && xDisplay.display != cursorMap[(Cursor) getHandle()]) | |||||
| auto cursor = (Cursor) getHandle(); | |||||
| auto cursorDisplay = cursorMap[cursor]; | |||||
| if (cursorHandle != nullptr && xDisplay.display != cursorDisplay) | |||||
| { | { | ||||
| auto oldHandle = (Cursor) getHandle(); | |||||
| cursorMap.erase (cursor); | |||||
| XFreeCursor (cursorDisplay, cursor); | |||||
| if (auto* customInfo = cursorHandle->getCustomInfo()) | if (auto* customInfo = cursorHandle->getCustomInfo()) | ||||
| cursorHandle->setHandle (customInfo->create()); | cursorHandle->setHandle (customInfo->create()); | ||||
| else | else | ||||
| cursorHandle->setHandle (createStandardMouseCursor (cursorHandle->getType())); | cursorHandle->setHandle (createStandardMouseCursor (cursorHandle->getType())); | ||||
| cursorMap.erase (oldHandle); | |||||
| } | } | ||||
| lp->showMouseCursor ((Cursor) getHandle()); | lp->showMouseCursor ((Cursor) getHandle()); | ||||