SDL/include
DS ac5b9bc4ee
Add support for X11 primary selection (#6132)
X11 has a so-called primary selection, which you can use by marking text and middle-clicking elsewhere to copy the marked text.

There are 3 new API functions in `SDL_clipboard.h`, which work exactly like their clipboard equivalents.

## Test Instructions

* Run the tests (just a copy of the clipboard tests): `$ ./test/testautomation --filter Clipboard`
* Build and run this small application:
<details>
```C
#include <SDL.h>
#include <unistd.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void print_error(const char *where)
{
	const char *errstr = SDL_GetError();
	if (errstr == NULL || errstr[0] == '\0')
		return;
	fprintf(stderr, "SDL Error after '%s': %s\n", where, errstr);
	SDL_ClearError();
}

int main()
{
	char text_buf[256];

	srand(time(NULL));

	SDL_Init(SDL_INIT_VIDEO);
	print_error("SDL_INIT()");
	SDL_Window *window = SDL_CreateWindow("Primary Selection Test", SDL_WINDOWPOS_UNDEFINED,
			SDL_WINDOWPOS_UNDEFINED, 400, 400, SDL_WINDOW_SHOWN);
	print_error("SDL_CreateWindow()");
	SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
	print_error("SDL_CreateRenderer()");

	bool quit = false;
	unsigned int do_render = 0;
	while (!quit) {
		SDL_Event event;
		while (SDL_PollEvent(&event)) {
			print_error("SDL_PollEvent()");
			switch (event.type) {
			case SDL_QUIT: {
				quit = true;
				break;
			} case SDL_KEYDOWN: {
				switch (event.key.keysym.sym) {
				case SDLK_ESCAPE:
				case SDLK_q:
					quit = true;
					break;
				case SDLK_c:
					snprintf(text_buf, sizeof(text_buf), "foo%d", rand());
					SDL_SetClipboardText(text_buf);
					print_error("SDL_SetClipboardText()");
					printf("clipboard: set_to=\"%s\"\n", text_buf);
					break;
				case SDLK_v: {
					printf("clipboard: has=%d, ", SDL_HasClipboardText());
					print_error("SDL_HasClipboardText()");
					char *text = SDL_GetClipboardText();
					print_error("SDL_GetClipboardText()");
					printf("text=\"%s\"\n", text);
					SDL_free(text);
					break;
				} case SDLK_d:
					snprintf(text_buf, sizeof(text_buf), "bar%d", rand());
					SDL_SetPrimarySelectionText(text_buf);
					print_error("SDL_SetPrimarySelectionText()");
					printf("primselec: set_to=\"%s\"\n", text_buf);
					break;
				case SDLK_f: {
					printf("primselec: has=%d, ", SDL_HasPrimarySelectionText());
					print_error("SDL_HasPrimarySelectionText()");
					char *text = SDL_GetPrimarySelectionText();
					print_error("SDL_GetPrimarySelectionText()");
					printf("text=\"%s\"\n", text);
					SDL_free(text);
					break;
				} default:
					break;
				}
				break;
			} default: {
				break;
			}}
		}
		// create less noise with WAYLAND_DEBUG=1
		if (do_render == 0) {
			SDL_RenderPresent(renderer);
			print_error("SDL_RenderPresent()");
		}
		do_render += 1;
		usleep(12000);
	}

	SDL_DestroyRenderer(renderer);
	SDL_DestroyWindow(window);
	SDL_Quit();
	print_error("quit");
	return 0;
}
```
</details>

* Use c,v,d,f to get and set the clipboard and primary selection.
* Mark text and middle-click also in other applications.
* For wayland under x:
  * `$ mutter --wayland --no-x11 --nested`
  * `$ XDG_SESSION_TYPE=wayland SDL_VIDEODRIVER=wayland ./<path_to_test_appl_binary>`
2022-09-14 09:28:35 -07:00
..
SDL.h Add SDL_guid.h to the global SDL header 2022-07-25 19:53:04 -07:00
SDL_assert.h Check if GNC is defined before checking its value to solve warns in msvc 2022-07-03 00:56:09 -07:00
SDL_atomic.h Use __ARM_ARCH instead of __ARM_ARCH__ 2022-08-19 13:15:28 -07:00
SDL_audio.h audio: Headers said 5 channel is quad+center, but it's 4.1. 2022-07-20 18:41:53 -04:00
SDL_bits.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_blendmode.h direct3d: Implement missing blend operations. 2022-03-27 09:14:07 -04:00
SDL_clipboard.h Add support for X11 primary selection (#6132) 2022-09-14 09:28:35 -07:00
SDL_config.h Xbox GDKX support (#5869) 2022-07-01 13:59:14 -07:00
SDL_config.h.cmake Assume that stdint.h is available on Windows with compilers other than MSVC <= 2008 2022-09-05 09:01:31 -07:00
SDL_config.h.in Fixed building with libusb not dynamicaly loaded 2022-09-01 11:30:02 -07:00
SDL_config_android.h add SDL_bsearch 2022-04-26 04:03:25 +03:00
SDL_config_emscripten.h add SDL_bsearch 2022-04-26 04:03:25 +03:00
SDL_config_iphoneos.h add SDL_bsearch 2022-04-26 04:03:25 +03:00
SDL_config_macosx.h Remove unused SDL_ASSEMBLY_ROUTINES define 2022-05-12 14:37:00 +03:00
SDL_config_minimal.h Assume that stdint.h is available on Windows with compilers other than MSVC <= 2008 2022-09-05 09:01:31 -07:00
SDL_config_ngage.h N-Gage port: add changes from code reviews, overall cleanup (#5618) 2022-05-11 09:31:34 -07:00
SDL_config_os2.h updated os2 config file after commit 3f89d1704d 2022-09-01 21:56:50 +03:00
SDL_config_pandora.h add SDL_bsearch 2022-04-26 04:03:25 +03:00
SDL_config_windows.h Assume that stdint.h is available on Windows with compilers other than MSVC <= 2008 2022-09-05 09:01:31 -07:00
SDL_config_wingdk.h Assume that stdint.h is available on Windows with compilers other than MSVC <= 2008 2022-09-05 09:01:31 -07:00
SDL_config_winrt.h Assume that stdint.h is available on Windows with compilers other than MSVC <= 2008 2022-09-05 09:01:31 -07:00
SDL_config_xbox.h Assume that stdint.h is available on Windows with compilers other than MSVC <= 2008 2022-09-05 09:01:31 -07:00
SDL_copying.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_cpuinfo.h Sync SDL wiki -> header 2022-07-29 13:24:05 +00:00
SDL_egl.h Updated to the latest version of OpenGL and Vulkan headers from the Khronos registry 2022-09-14 09:14:47 -07:00
SDL_endian.h Applied DragonFly BSD patch 2022-07-30 16:32:21 -07:00
SDL_error.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_events.h Add support for X11 primary selection (#6132) 2022-09-14 09:28:35 -07:00
SDL_filesystem.h Fixed typo in description 2022-07-11 08:44:49 -07:00
SDL_gamecontroller.h Sync SDL wiki -> header 2022-08-09 15:48:12 +00:00
SDL_gesture.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_guid.h Sync wiki -> header 2022-06-05 00:24:04 +00:00
SDL_haptic.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_hidapi.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_hints.h Added the hint SDL_HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED to control whether the player LED should be lit on the Nintendo Wii controllers 2022-09-01 16:30:55 -07:00
SDL_joystick.h Fixed documentation to match function parameter 2022-08-31 15:04:12 -07:00
SDL_keyboard.h Exposed SDL_ResetKeyboard() as a public function 2022-07-11 09:49:00 -07:00
SDL_keycode.h Add SDL_SCANCODE_CALL and SDL_SCANCODE_ENDCALL 2022-05-10 16:12:10 -07:00
SDL_loadso.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_locale.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_log.h Document that SDL_MAX_LOG_MESSAGE is no longer meaningful 2022-04-29 11:28:59 -07:00
SDL_main.h Add a way to avoid IOP reset 2022-08-08 08:32:38 -07:00
SDL_messagebox.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_metal.h Sync wiki -> header 2022-03-27 16:49:05 +00:00
SDL_misc.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_mouse.h Sync SDL wiki -> header 2022-08-11 21:11:11 +00:00
SDL_mutex.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_name.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_opengl.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_opengl_glext.h Updated to the latest version of OpenGL and Vulkan headers from the Khronos registry 2022-09-14 09:14:47 -07:00
SDL_opengles.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_opengles2.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_opengles2_gl2.h Updated to the latest version of OpenGL and Vulkan headers from the Khronos registry 2022-09-14 09:14:47 -07:00
SDL_opengles2_gl2ext.h Updated to the latest version of OpenGL and Vulkan headers from the Khronos registry 2022-09-14 09:14:47 -07:00
SDL_opengles2_gl2platform.h Updated to the latest version of OpenGL and Vulkan headers from the Khronos registry 2022-09-14 09:14:47 -07:00
SDL_opengles2_khrplatform.h Updated to the latest version of OpenGL and Vulkan headers from the Khronos registry 2022-09-14 09:14:47 -07:00
SDL_pixels.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_platform.h Xbox GDKX support (#5869) 2022-07-01 13:59:14 -07:00
SDL_power.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_quit.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_rect.h Avoid unintended float -> double conversion in SDL_FRectEqualsEpsilon 2022-05-19 11:47:03 -07:00
SDL_render.h Sync SDL wiki -> header 2022-08-21 14:05:04 +00:00
SDL_revision.h The revision defaults to the empty string 2021-02-12 08:54:08 -08:00
SDL_revision.h.cmake cmake: Retrieve the git revision on platforms without bash 2021-09-09 22:34:42 -04:00
SDL_rwops.h Windows GDK Support (#5830) 2022-06-27 10:19:39 -07:00
SDL_scancode.h Add SDL_SCANCODE_CALL and SDL_SCANCODE_ENDCALL 2022-05-10 16:12:10 -07:00
SDL_sensor.h Added left and right sensors for Nintendo Joy-Con and Wii controllers 2022-09-07 00:00:27 -07:00
SDL_shape.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_stdinc.h Always define SDL_COMPILE_TIME_ASSERT as static_assert() in C++ 2022-08-18 16:06:42 -07:00
SDL_surface.h SDL_Surface: don't implicitly declare struct SDL_BlitMap. 2022-06-20 18:31:39 -04:00
SDL_system.h Sync SDL wiki -> header 2022-06-27 17:20:12 +00:00
SDL_syswm.h wayland: Add support for TOOLTIP/POPUP_MENU 2022-04-18 12:31:02 -04:00
SDL_test.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_assert.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_common.h Added a command line option `--info event_motion` to show mouse and finger motion events 2022-07-29 20:37:38 -07:00
SDL_test_compare.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_crc32.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_font.h Removed comment text that looks like doxygen commands 2022-07-01 14:04:07 -07:00
SDL_test_fuzzer.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_harness.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_images.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_log.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_md5.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_memory.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_test_random.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_thread.h Windows GDK Support (#5830) 2022-06-27 10:19:39 -07:00
SDL_timer.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_touch.h Sync wiki -> header 2022-02-08 10:37:04 +00:00
SDL_types.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00
SDL_version.h Updated to version 2.25.0 for development 2022-08-19 09:38:42 -07:00
SDL_video.h Adding SDL_GetWindowSizeInPixels for window size in pixels (#6112) 2022-08-24 11:25:13 -07:00
SDL_vulkan.h Sync wiki -> header 2021-10-27 01:36:05 +00:00
begin_code.h Check if GNC is defined before checking its value to solve warns in msvc 2022-07-03 00:56:09 -07:00
close_code.h Updated copyright for 2022 2022-01-03 09:40:21 -08:00