From e8d694d6dd32dc150d9349768ca97f5590b9d797 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 6 Dec 2022 13:39:39 +0000 Subject: [PATCH] XWindowSystem: Avoid C casts for pointer-like types --- .../native/x11/juce_linux_XWindowSystem.cpp | 44 +++++++++++++------ .../native/x11/juce_linux_XWindowSystem.h | 2 +- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp index 47057aabaf..034812dfe3 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp +++ b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp @@ -1432,15 +1432,21 @@ ComponentPeer* getPeerFor (::Window windowH) if (windowH == 0) return nullptr; - XPointer peer = nullptr; - if (auto* display = XWindowSystem::getInstance()->getDisplay()) { XWindowSystemUtilities::ScopedXLock xLock; - X11Symbols::getInstance()->xFindContext (display, (XID) windowH, windowHandleXContext, &peer); + + if (XPointer peer = nullptr; + X11Symbols::getInstance()->xFindContext (display, + static_cast (windowH), + windowHandleXContext, + &peer) == 0) + { + return unalignedPointerCast (peer); + } } - return unalignedPointerCast (peer); + return nullptr; } //============================================================================== @@ -1543,7 +1549,10 @@ static int getAllEventsMask (bool ignoresMouseClicks) &swa); // Set the window context to identify the window handle object - if (X11Symbols::getInstance()->xSaveContext (display, (XID) windowH, windowHandleXContext, (XPointer) peer)) + if (X11Symbols::getInstance()->xSaveContext (display, + static_cast (windowH), + windowHandleXContext, + unalignedPointerCast (peer)) != 0) { // Failed jassertfalse; @@ -1625,10 +1634,13 @@ void XWindowSystem::destroyWindow (::Window windowH) XWindowSystemUtilities::ScopedXLock xLock; - XPointer handlePointer; + XPointer handlePointer{}; - if (! X11Symbols::getInstance()->xFindContext (display, (XID) windowH, windowHandleXContext, &handlePointer)) - X11Symbols::getInstance()->xDeleteContext (display, (XID) windowH, windowHandleXContext); + if (X11Symbols::getInstance()->xFindContext (display, static_cast (windowH), windowHandleXContext, &handlePointer) == 0) + { + const auto result = X11Symbols::getInstance()->xDeleteContext (display, static_cast (windowH), windowHandleXContext); + jassert (result == 0); + } X11Symbols::getInstance()->xDestroyWindow (display, windowH); @@ -2680,7 +2692,7 @@ Array XWindowSystem::findDisplays (float masterScale) const return displays; } -::Window XWindowSystem::createKeyProxy (::Window windowH) const +::Window XWindowSystem::createKeyProxy (::Window windowH) { jassert (windowH != 0); @@ -2694,7 +2706,10 @@ Array XWindowSystem::findDisplays (float masterScale) const &swa); X11Symbols::getInstance()->xMapWindow (display, keyProxy); - X11Symbols::getInstance()->xSaveContext (display, (XID) keyProxy, windowHandleXContext, (XPointer) this); + X11Symbols::getInstance()->xSaveContext (display, + static_cast (keyProxy), + windowHandleXContext, + unalignedPointerCast (this)); return keyProxy; } @@ -2703,10 +2718,13 @@ void XWindowSystem::deleteKeyProxy (::Window keyProxy) const { jassert (keyProxy != 0); - XPointer handlePointer; + XPointer handlePointer{}; - if (! X11Symbols::getInstance()->xFindContext (display, (XID) keyProxy, windowHandleXContext, &handlePointer)) - X11Symbols::getInstance()->xDeleteContext (display, (XID) keyProxy, windowHandleXContext); + if (X11Symbols::getInstance()->xFindContext (display, static_cast (keyProxy), windowHandleXContext, &handlePointer) == 0) + { + const auto result = X11Symbols::getInstance()->xDeleteContext (display, static_cast (keyProxy), windowHandleXContext); + jassert (result == 0); + } X11Symbols::getInstance()->xDestroyWindow (display, keyProxy); X11Symbols::getInstance()->xSync (display, false); diff --git a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h index 0659adbecc..7fd30a8473 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h +++ b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h @@ -225,7 +225,7 @@ public: Array findDisplays (float masterScale) const; - ::Window createKeyProxy (::Window) const; + ::Window createKeyProxy (::Window); void deleteKeyProxy (::Window) const; bool externalDragFileInit (LinuxComponentPeer*, const StringArray& files, bool canMove, std::function&& callback) const;