]> git.lizzy.rs Git - irrlicht.git/commitdiff
Use non-static member vars for SDL clipboard / primary selection buffers
authorDS <ds.desour@proton.me>
Sun, 26 Mar 2023 12:13:58 +0000 (14:13 +0200)
committerGitHub <noreply@github.com>
Sun, 26 Mar 2023 12:13:58 +0000 (14:13 +0200)
source/Irrlicht/COSOperator.cpp
source/Irrlicht/COSOperator.h

index 132232feb5875262e7bd8911fd150c9adec87ea6..1c3baf90da3a6b427552cd185c055baee8df29f1 100644 (file)
@@ -30,7 +30,7 @@
 #include "fast_atof.h"\r
 \r
 #if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
-static bool sdl_supports_primary_selection = [] {\r
+static const bool sdl_supports_primary_selection = [] {\r
 #if SDL_VERSION_ATLEAST(2, 25, 0)\r
        SDL_version linked_version;\r
        SDL_GetVersion(&linked_version);\r
@@ -62,6 +62,15 @@ COSOperator::COSOperator(const core::stringc& osVersion) : OperatingSystem(osVer
 }\r
 \r
 \r
+COSOperator::~COSOperator()\r
+{\r
+#ifdef _IRR_COMPILE_WITH_SDL_DEVICE_\r
+       SDL_free(ClipboardSelectionText);\r
+       SDL_free(PrimarySelectionText);\r
+#endif\r
+}\r
+\r
+\r
 //! returns the current operating system version as string.\r
 const core::stringc& COSOperator::getOperatingSystemVersion() const\r
 {\r
@@ -142,11 +151,9 @@ void COSOperator::copyToPrimarySelection(const c8 *text) const
 const c8* COSOperator::getTextFromClipboard() const\r
 {\r
 #if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
-       static char *text = nullptr;\r
-       if (text)\r
-               SDL_free(text);\r
-       text = SDL_GetClipboardText();\r
-       return text;\r
+       SDL_free(ClipboardSelectionText);\r
+       ClipboardSelectionText = SDL_GetClipboardText();\r
+       return ClipboardSelectionText;\r
 \r
 #elif defined(_IRR_WINDOWS_API_)\r
        if (!OpenClipboard(NULL))\r
@@ -195,19 +202,17 @@ const c8* COSOperator::getTextFromPrimarySelection() const
 #if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
 #if SDL_VERSION_ATLEAST(2, 25, 0)\r
        if (sdl_supports_primary_selection) {\r
-               static char *text = nullptr;\r
-               if (text)\r
-                       SDL_free(text);\r
-               text = SDL_GetPrimarySelectionText();\r
-               return text;\r
+               SDL_free(PrimarySelectionText);\r
+               PrimarySelectionText = SDL_GetPrimarySelectionText();\r
+               return PrimarySelectionText;\r
        }\r
 #endif\r
        return 0;\r
 \r
 #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
-    if ( IrrDeviceLinux )\r
-        return IrrDeviceLinux->getTextFromPrimarySelection();\r
-    return 0;\r
+       if ( IrrDeviceLinux )\r
+               return IrrDeviceLinux->getTextFromPrimarySelection();\r
+       return 0;\r
 \r
 #else\r
 \r
index 6510579e28030b64adb89c9f3f594b3b7ef18800..941dacc172fda208cbd4b1b5d0a1534fe2964d96 100644 (file)
@@ -23,6 +23,11 @@ public:
 #endif\r
        COSOperator(const core::stringc& osversion);\r
 \r
+       ~COSOperator();\r
+\r
+       COSOperator(const COSOperator &) = delete;\r
+       COSOperator &operator=(const COSOperator &) = delete;\r
+\r
        //! returns the current operation system version as string.\r
        const core::stringc& getOperatingSystemVersion() const override;\r
 \r
@@ -56,6 +61,12 @@ private:
        mutable core::stringc ClipboardBuf;\r
 #endif\r
 \r
+#ifdef _IRR_COMPILE_WITH_SDL_DEVICE_\r
+       // These need to be freed with SDL_free\r
+       mutable char *ClipboardSelectionText = nullptr;\r
+       mutable char *PrimarySelectionText = nullptr;\r
+#endif\r
+\r
 };\r
 \r
 } // end namespace\r