Cleanup of clipboard and string atoms.

This commit is contained in:
Camilla Berglund 2013-01-29 02:45:08 +01:00
parent 82b8dd5040
commit f3e39ce680
4 changed files with 22 additions and 18 deletions

View File

@ -88,7 +88,7 @@ Atom _glfwWriteSelection(XSelectionRequestEvent* request)
if (property == None) if (property == None)
property = _glfw.x11.selection.property; property = _glfw.x11.selection.property;
if (request->target == _glfw.x11.selection.targets) if (request->target == _glfw.x11.TARGETS)
{ {
// The list of supported targets was requested // The list of supported targets was requested
@ -139,7 +139,7 @@ void _glfwPlatformSetClipboardString(_GLFWwindow* window, const char* string)
// Set the specified window as owner of the selection // Set the specified window as owner of the selection
XSetSelectionOwner(_glfw.x11.display, XSetSelectionOwner(_glfw.x11.display,
_glfw.x11.selection.atom, _glfw.x11.CLIPBOARD,
window->x11.handle, CurrentTime); window->x11.handle, CurrentTime);
} }
@ -155,7 +155,7 @@ const char* _glfwPlatformGetClipboardString(_GLFWwindow* window)
_glfw.x11.selection.target = _glfw.x11.selection.formats[i]; _glfw.x11.selection.target = _glfw.x11.selection.formats[i];
XConvertSelection(_glfw.x11.display, XConvertSelection(_glfw.x11.display,
_glfw.x11.selection.atom, _glfw.x11.CLIPBOARD,
_glfw.x11.selection.target, _glfw.x11.selection.target,
_glfw.x11.selection.property, _glfw.x11.selection.property,
window->x11.handle, CurrentTime); window->x11.handle, CurrentTime);

View File

@ -518,26 +518,28 @@ static GLboolean initDisplay(void)
// Detect whether an EWMH-conformant window manager is running // Detect whether an EWMH-conformant window manager is running
detectEWMH(); detectEWMH();
// Find or create string format atoms
_glfw.x11.UTF8_STRING =
XInternAtom(_glfw.x11.display, "UTF8_STRING", False);
_glfw.x11.COMPOUND_STRING =
XInternAtom(_glfw.x11.display, "COMPOUND_STRING", False);
// Find or create selection property atom // Find or create selection property atom
_glfw.x11.selection.property = _glfw.x11.selection.property =
XInternAtom(_glfw.x11.display, "GLFW_SELECTION", False); XInternAtom(_glfw.x11.display, "GLFW_SELECTION", False);
// Find or create clipboard atom // Find or create standard clipboard atoms
_glfw.x11.selection.atom = _glfw.x11.TARGETS = XInternAtom(_glfw.x11.display, "TARGETS", False);
XInternAtom(_glfw.x11.display, "CLIPBOARD", False); _glfw.x11.CLIPBOARD = XInternAtom(_glfw.x11.display, "CLIPBOARD", False);
// Find or create selection target atoms // Find or create selection target atoms
_glfw.x11.selection.formats[_GLFW_CLIPBOARD_FORMAT_UTF8] = _glfw.x11.selection.formats[_GLFW_CLIPBOARD_FORMAT_UTF8] =
XInternAtom(_glfw.x11.display, "UTF8_STRING", False); _glfw.x11.UTF8_STRING;
_glfw.x11.selection.formats[_GLFW_CLIPBOARD_FORMAT_COMPOUND] = _glfw.x11.selection.formats[_GLFW_CLIPBOARD_FORMAT_COMPOUND] =
XInternAtom(_glfw.x11.display, "COMPOUND_STRING", False); _glfw.x11.COMPOUND_STRING;
_glfw.x11.selection.formats[_GLFW_CLIPBOARD_FORMAT_STRING] = _glfw.x11.selection.formats[_GLFW_CLIPBOARD_FORMAT_STRING] =
XA_STRING; XA_STRING;
_glfw.x11.selection.targets = XInternAtom(_glfw.x11.display,
"TARGETS",
False);
return GL_TRUE; return GL_TRUE;
} }

View File

@ -132,6 +132,12 @@ typedef struct _GLFWlibraryX11
Atom NET_WM_STATE_FULLSCREEN; Atom NET_WM_STATE_FULLSCREEN;
Atom NET_ACTIVE_WINDOW; Atom NET_ACTIVE_WINDOW;
// Selection atoms
Atom TARGETS;
Atom CLIPBOARD;
Atom UTF8_STRING;
Atom COMPOUND_STRING;
// True if window manager supports EWMH // True if window manager supports EWMH
GLboolean hasEWMH; GLboolean hasEWMH;
@ -176,11 +182,9 @@ typedef struct _GLFWlibraryX11
} timer; } timer;
struct { struct {
Atom atom;
Atom formats[_GLFW_CLIPBOARD_FORMAT_COUNT]; Atom formats[_GLFW_CLIPBOARD_FORMAT_COUNT];
char* string; char* string;
Atom target; Atom target;
Atom targets;
Atom property; Atom property;
int status; int status;
} selection; } selection;

View File

@ -872,8 +872,6 @@ void _glfwPlatformDestroyWindow(_GLFWwindow* window)
void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title) void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title)
{ {
Atom type = XInternAtom(_glfw.x11.display, "UTF8_STRING", False);
#if defined(X_HAVE_UTF8_STRING) #if defined(X_HAVE_UTF8_STRING)
Xutf8SetWMProperties(_glfw.x11.display, Xutf8SetWMProperties(_glfw.x11.display,
window->x11.handle, window->x11.handle,
@ -893,7 +891,7 @@ void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title)
if (_glfw.x11.NET_WM_NAME != None) if (_glfw.x11.NET_WM_NAME != None)
{ {
XChangeProperty(_glfw.x11.display, window->x11.handle, XChangeProperty(_glfw.x11.display, window->x11.handle,
_glfw.x11.NET_WM_NAME, type, 8, _glfw.x11.NET_WM_NAME, _glfw.x11.UTF8_STRING, 8,
PropModeReplace, PropModeReplace,
(unsigned char*) title, strlen(title)); (unsigned char*) title, strlen(title));
} }
@ -901,7 +899,7 @@ void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title)
if (_glfw.x11.NET_WM_ICON_NAME != None) if (_glfw.x11.NET_WM_ICON_NAME != None)
{ {
XChangeProperty(_glfw.x11.display, window->x11.handle, XChangeProperty(_glfw.x11.display, window->x11.handle,
_glfw.x11.NET_WM_ICON_NAME, type, 8, _glfw.x11.NET_WM_ICON_NAME, _glfw.x11.UTF8_STRING, 8,
PropModeReplace, PropModeReplace,
(unsigned char*) title, strlen(title)); (unsigned char*) title, strlen(title));
} }