21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_X11
33 #ifdef X_HAVE_UTF8_STRING
34 #define TEXT_FORMAT X11_XInternAtom(display, "UTF8_STRING", False)
36 #define TEXT_FORMAT XA_STRING
49 if (
data->clipboard_window == None) {
51 Window parent = RootWindow(
dpy, DefaultScreen(
dpy));
52 XSetWindowAttributes xattr;
53 data->clipboard_window = X11_XCreateWindow(
dpy, parent, -10, -10, 1, 1, 0,
54 CopyFromParent, InputOnly,
55 CopyFromParent, 0, &xattr);
56 X11_XFlush(
data->display);
59 return data->clipboard_window;
67 return X11_XInternAtom(display,
"SDL_CUTBUFFER", False);
76 Atom XA_CLIPBOARD = X11_XInternAtom(display,
"CLIPBOARD", 0);
81 return SDL_SetError(
"Couldn't find a window to own the selection");
86 X11_XChangeProperty(display, DefaultRootWindow(display),
90 if (XA_CLIPBOARD != None &&
91 X11_XGetSelectionOwner(display, XA_CLIPBOARD) !=
window) {
92 X11_XSetSelectionOwner(display, XA_CLIPBOARD,
window, CurrentTime);
95 if (X11_XGetSelectionOwner(display, XA_PRIMARY) !=
window) {
96 X11_XSetSelectionOwner(display, XA_PRIMARY,
window, CurrentTime);
105 Display *display = videodata->
display;
112 unsigned long nbytes;
113 unsigned long overflow;
118 Atom XA_CLIPBOARD = X11_XInternAtom(display,
"CLIPBOARD", 0);
119 if (XA_CLIPBOARD == None) {
129 owner = X11_XGetSelectionOwner(display, XA_CLIPBOARD);
132 owner = DefaultRootWindow(display);
133 selection = XA_CUT_BUFFER0;
135 }
else if (owner ==
window) {
136 owner = DefaultRootWindow(display);
141 selection = X11_XInternAtom(display,
"SDL_SELECTION", False);
142 X11_XConvertSelection(display, XA_CLIPBOARD,
format, selection, owner,
154 if (waitElapsed > 1000) {
165 if (X11_XGetWindowProperty(display, owner, selection, 0, INT_MAX/4, False,
166 format, &seln_type, &seln_format, &nbytes, &overflow, &
src)
168 if (seln_type ==
format) {