From 58db8622bd0afdec6ecebd0d053d81c5ced58f5f Mon Sep 17 00:00:00 2001 From: Camilla Berglund Date: Wed, 22 Jan 2014 01:34:44 +0100 Subject: [PATCH] Cleanup. --- src/x11_gamma.c | 6 +++--- src/x11_init.c | 2 +- src/x11_platform.h | 12 ++++++------ src/x11_unicode.c | 28 +++++++++++++--------------- src/x11_window.c | 31 +++++++++++++------------------ 5 files changed, 36 insertions(+), 43 deletions(-) diff --git a/src/x11_gamma.c b/src/x11_gamma.c index 6fb1b741..2582500a 100644 --- a/src/x11_gamma.c +++ b/src/x11_gamma.c @@ -40,10 +40,10 @@ void _glfwInitGammaRamp(void) { if (_glfw.x11.randr.available) { - XRRScreenResources* rr = XRRGetScreenResources(_glfw.x11.display, + XRRScreenResources* sr = XRRGetScreenResources(_glfw.x11.display, _glfw.x11.root); - if (!rr->ncrtc || !XRRGetCrtcGammaSize(_glfw.x11.display, rr->crtcs[0])) + if (!sr->ncrtc || !XRRGetCrtcGammaSize(_glfw.x11.display, sr->crtcs[0])) { // This is probably older Nvidia RandR with broken gamma support // Flag it as useless and fall back to Xf86VidMode, if available @@ -52,7 +52,7 @@ void _glfwInitGammaRamp(void) _glfw.x11.randr.gammaBroken = GL_TRUE; } - XRRFreeScreenResources(rr); + XRRFreeScreenResources(sr); } } diff --git a/src/x11_init.c b/src/x11_init.c index 98df5963..1f029791 100644 --- a/src/x11_init.c +++ b/src/x11_init.c @@ -539,7 +539,7 @@ static GLboolean initExtensions(void) _glfw.x11.SAVE_TARGETS = XInternAtom(_glfw.x11.display, "SAVE_TARGETS", False); - // Find or create drag and drop atoms + // Find Xdnd (drag and drop) atoms, if available _glfw.x11.XdndAware = XInternAtom(_glfw.x11.display, "XdndAware", True); _glfw.x11.XdndEnter = XInternAtom(_glfw.x11.display, "XdndEnter", True); _glfw.x11.XdndPosition = XInternAtom(_glfw.x11.display, "XdndPosition", True); diff --git a/src/x11_platform.h b/src/x11_platform.h index b3ca83fb..398af82a 100644 --- a/src/x11_platform.h +++ b/src/x11_platform.h @@ -119,7 +119,7 @@ typedef struct _GLFWlibraryX11 Atom NET_ACTIVE_WINDOW; Atom MOTIF_WM_HINTS; - // Atoms for Xdnd + // Xdnd (drag and drop) atoms Atom XdndAware; Atom XdndEnter; Atom XdndPosition; @@ -130,11 +130,7 @@ typedef struct _GLFWlibraryX11 Atom XdndFinished; Atom XdndSelection; - struct { - Window sourceWindow; - } xdnd; - - // Selection atoms + // Selection (clipboard) atoms Atom TARGETS; Atom MULTIPLE; Atom CLIPBOARD; @@ -205,6 +201,10 @@ typedef struct _GLFWlibraryX11 char* string; } selection; + struct { + Window source; + } xdnd; + struct { int present; int fd; diff --git a/src/x11_unicode.c b/src/x11_unicode.c index 445f14f0..6b6a13db 100644 --- a/src/x11_unicode.c +++ b/src/x11_unicode.c @@ -854,38 +854,36 @@ static struct codepair { // Convert X11 KeySym to Unicode // -long _glfwKeySym2Unicode( KeySym keysym ) +long _glfwKeySym2Unicode(KeySym keysym) { int min = 0; int max = sizeof(keysymtab) / sizeof(struct codepair) - 1; int mid; - /* First check for Latin-1 characters (1:1 mapping) */ - if( (keysym >= 0x0020 && keysym <= 0x007e) || - (keysym >= 0x00a0 && keysym <= 0x00ff) ) - { return keysym; + // First check for Latin-1 characters (1:1 mapping) + if ((keysym >= 0x0020 && keysym <= 0x007e) || + (keysym >= 0x00a0 && keysym <= 0x00ff)) + { + return keysym; } - /* Also check for directly encoded 24-bit UCS characters */ - if( (keysym & 0xff000000) == 0x01000000 ) + // Also check for directly encoded 24-bit UCS characters + if ((keysym & 0xff000000) == 0x01000000) return keysym & 0x00ffffff; - /* Binary search in table */ - while( max >= min ) + // Binary search in table + while (max >= min) { mid = (min + max) / 2; - if( keysymtab[mid].keysym < keysym ) + if (keysymtab[mid].keysym < keysym) min = mid + 1; - else if( keysymtab[mid].keysym > keysym ) + else if (keysymtab[mid].keysym > keysym) max = mid - 1; else - { - /* Found it! */ return keysymtab[mid].ucs; - } } - /* No matching Unicode value found */ + // No matching Unicode value found return -1; } diff --git a/src/x11_window.c b/src/x11_window.c index ff2963d3..776fba38 100644 --- a/src/x11_window.c +++ b/src/x11_window.c @@ -353,8 +353,7 @@ static GLboolean createWindow(_GLFWwindow* window, if (_glfw.x11.XdndAware) { - // Announce support for XDND version 5 and below - + // Announce support for Xdnd (drag and drop) const Atom version = 5; XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.XdndAware, XA_ATOM, 32, @@ -762,15 +761,14 @@ static void processEvent(XEvent *event) } else if (event->xclient.message_type == _glfw.x11.XdndEnter) { - // Xdnd Enter: the drag&drop event has started in the window, we - // could be getting the type and possible conversions here but - // since we use always string conversion we don't need it + // A drag operation has entered the window + // TODO: Check if UTF-8 string is supported by the source } else if (event->xclient.message_type == _glfw.x11.XdndDrop) { - // Xdnd Drop: The drag&drop event has finished dropping on - // the window, ask to convert the selection - _glfw.x11.xdnd.sourceWindow = event->xclient.data.l[0]; + // The drag operation has finished dropping on + // the window, ask to convert it to a UTF-8 string + _glfw.x11.xdnd.source = event->xclient.data.l[0]; XConvertSelection(_glfw.x11.display, _glfw.x11.XdndSelection, _glfw.x11.UTF8_STRING, @@ -779,8 +777,7 @@ static void processEvent(XEvent *event) } else if (event->xclient.message_type == _glfw.x11.XdndPosition) { - // Xdnd Position: get coordinates of the mouse inside the window - // and update the mouse position + // The drag operation has moved over the window const int absX = (event->xclient.data.l[2] >> 16) & 0xFFFF; const int absY = (event->xclient.data.l[2]) & 0xFFFF; int x, y; @@ -788,7 +785,7 @@ static void processEvent(XEvent *event) _glfwPlatformGetWindowPos(window, &x, &y); _glfwInputCursorMotion(window, absX - x, absY - y); - // Xdnd: reply with an XDND status message + // Reply that we are ready to copy the dragged data XEvent reply; memset(&reply, 0, sizeof(reply)); @@ -800,7 +797,7 @@ static void processEvent(XEvent *event) reply.xclient.data.l[1] = 1; // Always accept the dnd with no rectangle reply.xclient.data.l[2] = 0; // Specify an empty rectangle reply.xclient.data.l[3] = 0; - reply.xclient.data.l[4] = _glfw.x11.XdndActionCopy; // We only accept copying + reply.xclient.data.l[4] = _glfw.x11.XdndActionCopy; XSendEvent(_glfw.x11.display, window->x11.handle, False, NoEventMask, &reply); @@ -814,10 +811,8 @@ static void processEvent(XEvent *event) { if (event->xselection.property) { - // Xdnd: got a selection notification from the conversion - // we asked for, get the data and finish the d&d event + // The converted data from the drag operation has arrived char* data; - const int result = _glfwGetWindowProperty(event->xselection.requestor, event->xselection.property, event->xselection.target, @@ -841,15 +836,15 @@ static void processEvent(XEvent *event) memset(&reply, 0, sizeof(reply)); reply.type = ClientMessage; - reply.xclient.window = _glfw.x11.xdnd.sourceWindow; + reply.xclient.window = _glfw.x11.xdnd.source; reply.xclient.message_type = _glfw.x11.XdndFinished; reply.xclient.format = 32; reply.xclient.data.l[0] = window->x11.handle; reply.xclient.data.l[1] = result; - reply.xclient.data.l[2] = _glfw.x11.XdndActionCopy; // We only ever copy + reply.xclient.data.l[2] = _glfw.x11.XdndActionCopy; // Reply that all is well - XSendEvent(_glfw.x11.display, _glfw.x11.xdnd.sourceWindow, + XSendEvent(_glfw.x11.display, _glfw.x11.xdnd.source, False, NoEventMask, &reply); XFlush(_glfw.x11.display); }