]> git.lizzy.rs Git - irrlicht.git/commitdiff
SDL: Support primary selection
authorDesour <vorunbekannt75@web.de>
Wed, 14 Sep 2022 20:48:06 +0000 (22:48 +0200)
committersfan5 <sfan5@live.de>
Fri, 24 Mar 2023 16:59:06 +0000 (17:59 +0100)
Requires SDL >= 2.25.0 (newest master).

source/Irrlicht/COSOperator.cpp

index 4f441786e4aebd4c7326a95b8c6540dd2ff5ca7b..132232feb5875262e7bd8911fd150c9adec87ea6 100644 (file)
@@ -19,6 +19,7 @@
 \r
 #if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
 #include <SDL_clipboard.h>\r
+#include <SDL_version.h>\r
 #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
 #include "CIrrDeviceLinux.h"\r
 #endif\r
 \r
 #include "fast_atof.h"\r
 \r
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
+static bool sdl_supports_primary_selection = [] {\r
+#if SDL_VERSION_ATLEAST(2, 25, 0)\r
+       SDL_version linked_version;\r
+       SDL_GetVersion(&linked_version);\r
+       return (linked_version.major == 2 && linked_version.minor >= 25)\r
+                       || linked_version.major > 2;\r
+#else\r
+       return false;\r
+#endif\r
+}();\r
+#endif\r
+\r
 namespace irr\r
 {\r
 \r
@@ -111,7 +125,13 @@ void COSOperator::copyToPrimarySelection(const c8 *text) const
        if (strlen(text)==0)\r
                return;\r
 \r
-#if defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
+#if SDL_VERSION_ATLEAST(2, 25, 0)\r
+       if (sdl_supports_primary_selection)\r
+               SDL_SetPrimarySelectionText(text);\r
+#endif\r
+\r
+#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
     if ( IrrDeviceLinux )\r
         IrrDeviceLinux->copyToPrimarySelection(text);\r
 #endif\r
@@ -172,7 +192,19 @@ const c8* COSOperator::getTextFromClipboard() const
 //! gets text from the primary selection\r
 const c8* COSOperator::getTextFromPrimarySelection() const\r
 {\r
-#if defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
+#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
+       }\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