Simple Directmedia Layer
Go to file
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
.github Create dummy PS2 Video driver 2022-08-02 11:40:31 -07:00
VisualC Added initial support for Wii controllers (thanks @tellowkrinkle!) 2022-09-01 15:29:41 -07:00
VisualC-GDK Added initial support for Wii controllers (thanks @tellowkrinkle!) 2022-09-01 15:29:41 -07:00
VisualC-WinRT add SDL_crc16.c to msvc and watcom builds 2022-08-11 20:11:32 +03:00
Xcode fix DYLIB version inconsistencies and test failures after #6188. 2022-09-06 03:15:02 +03:00
Xcode-iOS Updated iOS build instructions 2021-11-30 12:19:26 -08:00
acinclude autoconf: use ax_compute_relative_paths 2022-07-27 21:06:31 +02:00
android-project Split SDLSurface to public class 2022-08-22 14:57:15 -07:00
android-project-ant Added the old ant Android build project structure 2017-10-28 12:11:25 -07:00
build-scripts emscripten-buildbot.sh: force `-s USE_SDL=0` 2022-08-17 21:39:59 -04:00
cmake cmake: forward HAVE_LIBUSB to HAVE_HIDAPI_LIBUSB 2022-09-10 15:53:11 +02:00
docs Add build target to Xcode project to create an xcframework for iOS (#6188) 2022-09-05 13:10:15 -07:00
include Add support for X11 primary selection (#6132) 2022-09-14 09:28:35 -07:00
mingw/pkg-support/cmake Fix MinGW SDK redist: sdl2-config.cmake needs to set SDL2_FOUND 2022-06-03 21:05:55 -07:00
src Add support for X11 primary selection (#6132) 2022-09-14 09:28:35 -07:00
test Add support for X11 primary selection (#6132) 2022-09-14 09:28:35 -07:00
visualtest remove all unnecessary stuff from visualtest configury. 2021-12-21 20:01:02 +03:00
wayland-protocols Add support for X11 primary selection (#6132) 2022-09-14 09:28:35 -07:00
.clang-format Disable formatting not supported by Visual Studio 2019 2022-05-27 15:29:21 -07:00
.editorconfig .editorconfig: Use correct path for wayland-protocols 2022-08-23 06:28:04 -07:00
.gitignore Update .gitignore 2022-08-24 15:34:46 -07:00
.wikiheaders-options wikiheaders.pl: changes to make this usable with external projects. 2022-06-15 23:26:24 -04:00
Android.mk mark Android.mk as non-executable 2021-11-12 12:55:28 +03:00
BUGS.txt Cleaned up a few more Bugzilla mentions. 2021-02-12 14:46:49 -05:00
CMakeLists.txt vita: Drop memcmp redirect to sceClibMemcmp. 2022-09-12 13:32:48 -07:00
CREDITS.txt Fixed crash if initialization of EGL failed but was tried again later. 2015-06-21 17:33:46 +02:00
INSTALL.txt INSTALL.txt: Say "macOS" instead of "Mac OS X" in modern times. 2022-03-15 13:07:55 -04:00
LICENSE.txt Updated copyright for 2022 2022-01-03 09:40:21 -08:00
Makefile.in We want to ship the CMake input file, not the generated file 2022-07-11 08:55:49 -07:00
Makefile.minimal build libSDL2_test too with Makefile.minimal 2021-11-14 01:10:32 +03:00
Makefile.os2 Added initial support for Wii controllers (thanks @tellowkrinkle!) 2022-09-01 15:29:41 -07:00
Makefile.pandora more fixes to standalone makefiles. 2021-11-13 21:56:20 +03:00
Makefile.w32 Added initial support for Wii controllers (thanks @tellowkrinkle!) 2022-09-01 15:29:41 -07:00
README-SDL.txt More HTTPS changes in the documentation. 2017-02-16 16:52:03 -05:00
README.md Update and rename README.txt to README.md 2021-03-20 18:46:37 -04:00
SDL2.spec.in license: Fixed references to COPYING.txt that are now LICENSE.txt. 2021-02-18 11:07:26 -05:00
SDL2Config.cmake.in ci: Test cmake build script on Android 2022-06-15 11:11:49 -07:00
TODO.txt Fixed up legacy MoinMoin URLs at wiki.libsdl.org 2021-04-01 12:20:33 -04:00
WhatsNew.txt 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
autogen.sh Simplified autogen.sh, thanks to @smcv for the tip 2022-05-05 11:54:24 -07:00
cmake_uninstall.cmake.in Fixed bug 3867 - Can't find install_manifest.txt when running 'uninstall' target 2017-10-12 08:44:45 -07:00
configure regenerated configure script. 2022-09-12 20:20:04 +03:00
configure.ac configure.ac: fix configure tests broken with Clang 15 (implicit function declarations) 2022-09-12 10:07:56 -07:00
sdl2-config-version.cmake.in Add documentation to autotoo'ls sdl2-config-version.cmake.in 2022-05-31 00:10:55 +02:00
sdl2-config.cmake.in cmake: fix location of SDL2::SDL2test imported library 2022-09-05 21:53:50 +02:00
sdl2-config.in cmake+ci: fix+test sdl2-config + sdl2.pc for all supported platforms 2022-06-23 14:17:38 +02:00
sdl2.m4 Fixed macOS framework detection in sdl2.m4 2022-08-26 09:12:56 -07:00
sdl2.pc.in Compatible with including as <SDL2/SDL.h> 2022-07-28 20:34:34 -07:00

README.md

Simple DirectMedia Layer (SDL) Version 2.0

https://www.libsdl.org/

Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D. It is used by video playback software, emulators, and popular games including Valve's award winning catalog and many Humble Bundle games.

More extensive documentation is available in the docs directory, starting with README.md

Enjoy!

Sam Lantinga (slouken@libsdl.org)