diff --git a/modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp b/modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp index 9218569e28..c607d06da6 100644 --- a/modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp @@ -998,6 +998,7 @@ namespace PixmapHelpers GC gc = XCreateGC (display, pixmap, 0, nullptr); XPutImage (display, pixmap, gc, ximage, 0, 0, 0, 0, width, height); XFreeGC (display, gc); + XFree (ximage); return pixmap; } @@ -4044,6 +4045,8 @@ void MouseCursor::deleteMouseCursor (void* cursorHandle, bool) if (auto display = xDisplay.display) { ScopedXLock xlock (display); + + cursorMap.erase ((Cursor) cursorHandle); XFreeCursor (display, (Cursor) cursorHandle); } } @@ -4113,16 +4116,18 @@ void MouseCursor::showInWindow (ComponentPeer* peer) const { 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()) cursorHandle->setHandle (customInfo->create()); else cursorHandle->setHandle (createStandardMouseCursor (cursorHandle->getType())); - - cursorMap.erase (oldHandle); } lp->showMouseCursor ((Cursor) getHandle());