github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/tests/raylib/external/glfw/src/x11_platform.h (about)

     1  //========================================================================
     2  // GLFW 3.4 X11 - www.glfw.org
     3  //------------------------------------------------------------------------
     4  // Copyright (c) 2002-2006 Marcus Geelnard
     5  // Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
     6  //
     7  // This software is provided 'as-is', without any express or implied
     8  // warranty. In no event will the authors be held liable for any damages
     9  // arising from the use of this software.
    10  //
    11  // Permission is granted to anyone to use this software for any purpose,
    12  // including commercial applications, and to alter it and redistribute it
    13  // freely, subject to the following restrictions:
    14  //
    15  // 1. The origin of this software must not be misrepresented; you must not
    16  //    claim that you wrote the original software. If you use this software
    17  //    in a product, an acknowledgment in the product documentation would
    18  //    be appreciated but is not required.
    19  //
    20  // 2. Altered source versions must be plainly marked as such, and must not
    21  //    be misrepresented as being the original software.
    22  //
    23  // 3. This notice may not be removed or altered from any source
    24  //    distribution.
    25  //
    26  //========================================================================
    27  
    28  #include <unistd.h>
    29  #include <signal.h>
    30  #include <stdint.h>
    31  
    32  #include <X11/Xlib.h>
    33  #include <X11/keysym.h>
    34  #include <X11/Xatom.h>
    35  #include <X11/Xresource.h>
    36  #include <X11/Xcursor/Xcursor.h>
    37  
    38  // The XRandR extension provides mode setting and gamma control
    39  #include <X11/extensions/Xrandr.h>
    40  
    41  // The Xkb extension provides improved keyboard support
    42  #include <X11/XKBlib.h>
    43  
    44  // The Xinerama extension provides legacy monitor indices
    45  #include <X11/extensions/Xinerama.h>
    46  
    47  // The XInput extension provides raw mouse motion input
    48  #include <X11/extensions/XInput2.h>
    49  
    50  // The Shape extension provides custom window shapes
    51  #include <X11/extensions/shape.h>
    52  
    53  #define GLX_VENDOR 1
    54  #define GLX_RGBA_BIT 0x00000001
    55  #define GLX_WINDOW_BIT 0x00000001
    56  #define GLX_DRAWABLE_TYPE 0x8010
    57  #define GLX_RENDER_TYPE 0x8011
    58  #define GLX_RGBA_TYPE 0x8014
    59  #define GLX_DOUBLEBUFFER 5
    60  #define GLX_STEREO 6
    61  #define GLX_AUX_BUFFERS 7
    62  #define GLX_RED_SIZE 8
    63  #define GLX_GREEN_SIZE 9
    64  #define GLX_BLUE_SIZE 10
    65  #define GLX_ALPHA_SIZE 11
    66  #define GLX_DEPTH_SIZE 12
    67  #define GLX_STENCIL_SIZE 13
    68  #define GLX_ACCUM_RED_SIZE 14
    69  #define GLX_ACCUM_GREEN_SIZE 15
    70  #define GLX_ACCUM_BLUE_SIZE 16
    71  #define GLX_ACCUM_ALPHA_SIZE 17
    72  #define GLX_SAMPLES 0x186a1
    73  #define GLX_VISUAL_ID 0x800b
    74  
    75  #define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20b2
    76  #define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001
    77  #define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
    78  #define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
    79  #define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
    80  #define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
    81  #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
    82  #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
    83  #define GLX_CONTEXT_FLAGS_ARB 0x2094
    84  #define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
    85  #define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
    86  #define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252
    87  #define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
    88  #define GLX_NO_RESET_NOTIFICATION_ARB 0x8261
    89  #define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097
    90  #define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0
    91  #define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098
    92  #define GLX_CONTEXT_OPENGL_NO_ERROR_ARB 0x31b3
    93  
    94  typedef XID GLXWindow;
    95  typedef XID GLXDrawable;
    96  typedef struct __GLXFBConfig* GLXFBConfig;
    97  typedef struct __GLXcontext* GLXContext;
    98  typedef void (*__GLXextproc)(void);
    99  
   100  typedef XClassHint* (* PFN_XAllocClassHint)(void);
   101  typedef XSizeHints* (* PFN_XAllocSizeHints)(void);
   102  typedef XWMHints* (* PFN_XAllocWMHints)(void);
   103  typedef int (* PFN_XChangeProperty)(Display*,Window,Atom,Atom,int,int,const unsigned char*,int);
   104  typedef int (* PFN_XChangeWindowAttributes)(Display*,Window,unsigned long,XSetWindowAttributes*);
   105  typedef Bool (* PFN_XCheckIfEvent)(Display*,XEvent*,Bool(*)(Display*,XEvent*,XPointer),XPointer);
   106  typedef Bool (* PFN_XCheckTypedWindowEvent)(Display*,Window,int,XEvent*);
   107  typedef int (* PFN_XCloseDisplay)(Display*);
   108  typedef Status (* PFN_XCloseIM)(XIM);
   109  typedef int (* PFN_XConvertSelection)(Display*,Atom,Atom,Atom,Window,Time);
   110  typedef Colormap (* PFN_XCreateColormap)(Display*,Window,Visual*,int);
   111  typedef Cursor (* PFN_XCreateFontCursor)(Display*,unsigned int);
   112  typedef XIC (* PFN_XCreateIC)(XIM,...);
   113  typedef Region (* PFN_XCreateRegion)(void);
   114  typedef Window (* PFN_XCreateWindow)(Display*,Window,int,int,unsigned int,unsigned int,unsigned int,int,unsigned int,Visual*,unsigned long,XSetWindowAttributes*);
   115  typedef int (* PFN_XDefineCursor)(Display*,Window,Cursor);
   116  typedef int (* PFN_XDeleteContext)(Display*,XID,XContext);
   117  typedef int (* PFN_XDeleteProperty)(Display*,Window,Atom);
   118  typedef void (* PFN_XDestroyIC)(XIC);
   119  typedef int (* PFN_XDestroyRegion)(Region);
   120  typedef int (* PFN_XDestroyWindow)(Display*,Window);
   121  typedef int (* PFN_XDisplayKeycodes)(Display*,int*,int*);
   122  typedef int (* PFN_XEventsQueued)(Display*,int);
   123  typedef Bool (* PFN_XFilterEvent)(XEvent*,Window);
   124  typedef int (* PFN_XFindContext)(Display*,XID,XContext,XPointer*);
   125  typedef int (* PFN_XFlush)(Display*);
   126  typedef int (* PFN_XFree)(void*);
   127  typedef int (* PFN_XFreeColormap)(Display*,Colormap);
   128  typedef int (* PFN_XFreeCursor)(Display*,Cursor);
   129  typedef void (* PFN_XFreeEventData)(Display*,XGenericEventCookie*);
   130  typedef int (* PFN_XGetErrorText)(Display*,int,char*,int);
   131  typedef Bool (* PFN_XGetEventData)(Display*,XGenericEventCookie*);
   132  typedef char* (* PFN_XGetICValues)(XIC,...);
   133  typedef char* (* PFN_XGetIMValues)(XIM,...);
   134  typedef int (* PFN_XGetInputFocus)(Display*,Window*,int*);
   135  typedef KeySym* (* PFN_XGetKeyboardMapping)(Display*,KeyCode,int,int*);
   136  typedef int (* PFN_XGetScreenSaver)(Display*,int*,int*,int*,int*);
   137  typedef Window (* PFN_XGetSelectionOwner)(Display*,Atom);
   138  typedef XVisualInfo* (* PFN_XGetVisualInfo)(Display*,long,XVisualInfo*,int*);
   139  typedef Status (* PFN_XGetWMNormalHints)(Display*,Window,XSizeHints*,long*);
   140  typedef Status (* PFN_XGetWindowAttributes)(Display*,Window,XWindowAttributes*);
   141  typedef int (* PFN_XGetWindowProperty)(Display*,Window,Atom,long,long,Bool,Atom,Atom*,int*,unsigned long*,unsigned long*,unsigned char**);
   142  typedef int (* PFN_XGrabPointer)(Display*,Window,Bool,unsigned int,int,int,Window,Cursor,Time);
   143  typedef Status (* PFN_XIconifyWindow)(Display*,Window,int);
   144  typedef Status (* PFN_XInitThreads)(void);
   145  typedef Atom (* PFN_XInternAtom)(Display*,const char*,Bool);
   146  typedef int (* PFN_XLookupString)(XKeyEvent*,char*,int,KeySym*,XComposeStatus*);
   147  typedef int (* PFN_XMapRaised)(Display*,Window);
   148  typedef int (* PFN_XMapWindow)(Display*,Window);
   149  typedef int (* PFN_XMoveResizeWindow)(Display*,Window,int,int,unsigned int,unsigned int);
   150  typedef int (* PFN_XMoveWindow)(Display*,Window,int,int);
   151  typedef int (* PFN_XNextEvent)(Display*,XEvent*);
   152  typedef Display* (* PFN_XOpenDisplay)(const char*);
   153  typedef XIM (* PFN_XOpenIM)(Display*,XrmDatabase*,char*,char*);
   154  typedef int (* PFN_XPeekEvent)(Display*,XEvent*);
   155  typedef int (* PFN_XPending)(Display*);
   156  typedef Bool (* PFN_XQueryExtension)(Display*,const char*,int*,int*,int*);
   157  typedef Bool (* PFN_XQueryPointer)(Display*,Window,Window*,Window*,int*,int*,int*,int*,unsigned int*);
   158  typedef int (* PFN_XRaiseWindow)(Display*,Window);
   159  typedef Bool (* PFN_XRegisterIMInstantiateCallback)(Display*,void*,char*,char*,XIDProc,XPointer);
   160  typedef int (* PFN_XResizeWindow)(Display*,Window,unsigned int,unsigned int);
   161  typedef char* (* PFN_XResourceManagerString)(Display*);
   162  typedef int (* PFN_XSaveContext)(Display*,XID,XContext,const char*);
   163  typedef int (* PFN_XSelectInput)(Display*,Window,long);
   164  typedef Status (* PFN_XSendEvent)(Display*,Window,Bool,long,XEvent*);
   165  typedef int (* PFN_XSetClassHint)(Display*,Window,XClassHint*);
   166  typedef XErrorHandler (* PFN_XSetErrorHandler)(XErrorHandler);
   167  typedef void (* PFN_XSetICFocus)(XIC);
   168  typedef char* (* PFN_XSetIMValues)(XIM,...);
   169  typedef int (* PFN_XSetInputFocus)(Display*,Window,int,Time);
   170  typedef char* (* PFN_XSetLocaleModifiers)(const char*);
   171  typedef int (* PFN_XSetScreenSaver)(Display*,int,int,int,int);
   172  typedef int (* PFN_XSetSelectionOwner)(Display*,Atom,Window,Time);
   173  typedef int (* PFN_XSetWMHints)(Display*,Window,XWMHints*);
   174  typedef void (* PFN_XSetWMNormalHints)(Display*,Window,XSizeHints*);
   175  typedef Status (* PFN_XSetWMProtocols)(Display*,Window,Atom*,int);
   176  typedef Bool (* PFN_XSupportsLocale)(void);
   177  typedef int (* PFN_XSync)(Display*,Bool);
   178  typedef Bool (* PFN_XTranslateCoordinates)(Display*,Window,Window,int,int,int*,int*,Window*);
   179  typedef int (* PFN_XUndefineCursor)(Display*,Window);
   180  typedef int (* PFN_XUngrabPointer)(Display*,Time);
   181  typedef int (* PFN_XUnmapWindow)(Display*,Window);
   182  typedef void (* PFN_XUnsetICFocus)(XIC);
   183  typedef VisualID (* PFN_XVisualIDFromVisual)(Visual*);
   184  typedef int (* PFN_XWarpPointer)(Display*,Window,Window,int,int,unsigned int,unsigned int,int,int);
   185  typedef void (* PFN_XkbFreeKeyboard)(XkbDescPtr,unsigned int,Bool);
   186  typedef void (* PFN_XkbFreeNames)(XkbDescPtr,unsigned int,Bool);
   187  typedef XkbDescPtr (* PFN_XkbGetMap)(Display*,unsigned int,unsigned int);
   188  typedef Status (* PFN_XkbGetNames)(Display*,unsigned int,XkbDescPtr);
   189  typedef Status (* PFN_XkbGetState)(Display*,unsigned int,XkbStatePtr);
   190  typedef KeySym (* PFN_XkbKeycodeToKeysym)(Display*,KeyCode,int,int);
   191  typedef Bool (* PFN_XkbQueryExtension)(Display*,int*,int*,int*,int*,int*);
   192  typedef Bool (* PFN_XkbSelectEventDetails)(Display*,unsigned int,unsigned int,unsigned long,unsigned long);
   193  typedef Bool (* PFN_XkbSetDetectableAutoRepeat)(Display*,Bool,Bool*);
   194  typedef void (* PFN_XrmDestroyDatabase)(XrmDatabase);
   195  typedef Bool (* PFN_XrmGetResource)(XrmDatabase,const char*,const char*,char**,XrmValue*);
   196  typedef XrmDatabase (* PFN_XrmGetStringDatabase)(const char*);
   197  typedef void (* PFN_XrmInitialize)(void);
   198  typedef XrmQuark (* PFN_XrmUniqueQuark)(void);
   199  typedef Bool (* PFN_XUnregisterIMInstantiateCallback)(Display*,void*,char*,char*,XIDProc,XPointer);
   200  typedef int (* PFN_Xutf8LookupString)(XIC,XKeyPressedEvent*,char*,int,KeySym*,Status*);
   201  typedef void (* PFN_Xutf8SetWMProperties)(Display*,Window,const char*,const char*,char**,int,XSizeHints*,XWMHints*,XClassHint*);
   202  #define XAllocClassHint _glfw.x11.xlib.AllocClassHint
   203  #define XAllocSizeHints _glfw.x11.xlib.AllocSizeHints
   204  #define XAllocWMHints _glfw.x11.xlib.AllocWMHints
   205  #define XChangeProperty _glfw.x11.xlib.ChangeProperty
   206  #define XChangeWindowAttributes _glfw.x11.xlib.ChangeWindowAttributes
   207  #define XCheckIfEvent _glfw.x11.xlib.CheckIfEvent
   208  #define XCheckTypedWindowEvent _glfw.x11.xlib.CheckTypedWindowEvent
   209  #define XCloseDisplay _glfw.x11.xlib.CloseDisplay
   210  #define XCloseIM _glfw.x11.xlib.CloseIM
   211  #define XConvertSelection _glfw.x11.xlib.ConvertSelection
   212  #define XCreateColormap _glfw.x11.xlib.CreateColormap
   213  #define XCreateFontCursor _glfw.x11.xlib.CreateFontCursor
   214  #define XCreateIC _glfw.x11.xlib.CreateIC
   215  #define XCreateRegion _glfw.x11.xlib.CreateRegion
   216  #define XCreateWindow _glfw.x11.xlib.CreateWindow
   217  #define XDefineCursor _glfw.x11.xlib.DefineCursor
   218  #define XDeleteContext _glfw.x11.xlib.DeleteContext
   219  #define XDeleteProperty _glfw.x11.xlib.DeleteProperty
   220  #define XDestroyIC _glfw.x11.xlib.DestroyIC
   221  #define XDestroyRegion _glfw.x11.xlib.DestroyRegion
   222  #define XDestroyWindow _glfw.x11.xlib.DestroyWindow
   223  #define XDisplayKeycodes _glfw.x11.xlib.DisplayKeycodes
   224  #define XEventsQueued _glfw.x11.xlib.EventsQueued
   225  #define XFilterEvent _glfw.x11.xlib.FilterEvent
   226  #define XFindContext _glfw.x11.xlib.FindContext
   227  #define XFlush _glfw.x11.xlib.Flush
   228  #define XFree _glfw.x11.xlib.Free
   229  #define XFreeColormap _glfw.x11.xlib.FreeColormap
   230  #define XFreeCursor _glfw.x11.xlib.FreeCursor
   231  #define XFreeEventData _glfw.x11.xlib.FreeEventData
   232  #define XGetErrorText _glfw.x11.xlib.GetErrorText
   233  #define XGetEventData _glfw.x11.xlib.GetEventData
   234  #define XGetICValues _glfw.x11.xlib.GetICValues
   235  #define XGetIMValues _glfw.x11.xlib.GetIMValues
   236  #define XGetInputFocus _glfw.x11.xlib.GetInputFocus
   237  #define XGetKeyboardMapping _glfw.x11.xlib.GetKeyboardMapping
   238  #define XGetScreenSaver _glfw.x11.xlib.GetScreenSaver
   239  #define XGetSelectionOwner _glfw.x11.xlib.GetSelectionOwner
   240  #define XGetVisualInfo _glfw.x11.xlib.GetVisualInfo
   241  #define XGetWMNormalHints _glfw.x11.xlib.GetWMNormalHints
   242  #define XGetWindowAttributes _glfw.x11.xlib.GetWindowAttributes
   243  #define XGetWindowProperty _glfw.x11.xlib.GetWindowProperty
   244  #define XGrabPointer _glfw.x11.xlib.GrabPointer
   245  #define XIconifyWindow _glfw.x11.xlib.IconifyWindow
   246  #define XInternAtom _glfw.x11.xlib.InternAtom
   247  #define XLookupString _glfw.x11.xlib.LookupString
   248  #define XMapRaised _glfw.x11.xlib.MapRaised
   249  #define XMapWindow _glfw.x11.xlib.MapWindow
   250  #define XMoveResizeWindow _glfw.x11.xlib.MoveResizeWindow
   251  #define XMoveWindow _glfw.x11.xlib.MoveWindow
   252  #define XNextEvent _glfw.x11.xlib.NextEvent
   253  #define XOpenIM _glfw.x11.xlib.OpenIM
   254  #define XPeekEvent _glfw.x11.xlib.PeekEvent
   255  #define XPending _glfw.x11.xlib.Pending
   256  #define XQueryExtension _glfw.x11.xlib.QueryExtension
   257  #define XQueryPointer _glfw.x11.xlib.QueryPointer
   258  #define XRaiseWindow _glfw.x11.xlib.RaiseWindow
   259  #define XRegisterIMInstantiateCallback _glfw.x11.xlib.RegisterIMInstantiateCallback
   260  #define XResizeWindow _glfw.x11.xlib.ResizeWindow
   261  #define XResourceManagerString _glfw.x11.xlib.ResourceManagerString
   262  #define XSaveContext _glfw.x11.xlib.SaveContext
   263  #define XSelectInput _glfw.x11.xlib.SelectInput
   264  #define XSendEvent _glfw.x11.xlib.SendEvent
   265  #define XSetClassHint _glfw.x11.xlib.SetClassHint
   266  #define XSetErrorHandler _glfw.x11.xlib.SetErrorHandler
   267  #define XSetICFocus _glfw.x11.xlib.SetICFocus
   268  #define XSetIMValues _glfw.x11.xlib.SetIMValues
   269  #define XSetInputFocus _glfw.x11.xlib.SetInputFocus
   270  #define XSetLocaleModifiers _glfw.x11.xlib.SetLocaleModifiers
   271  #define XSetScreenSaver _glfw.x11.xlib.SetScreenSaver
   272  #define XSetSelectionOwner _glfw.x11.xlib.SetSelectionOwner
   273  #define XSetWMHints _glfw.x11.xlib.SetWMHints
   274  #define XSetWMNormalHints _glfw.x11.xlib.SetWMNormalHints
   275  #define XSetWMProtocols _glfw.x11.xlib.SetWMProtocols
   276  #define XSupportsLocale _glfw.x11.xlib.SupportsLocale
   277  #define XSync _glfw.x11.xlib.Sync
   278  #define XTranslateCoordinates _glfw.x11.xlib.TranslateCoordinates
   279  #define XUndefineCursor _glfw.x11.xlib.UndefineCursor
   280  #define XUngrabPointer _glfw.x11.xlib.UngrabPointer
   281  #define XUnmapWindow _glfw.x11.xlib.UnmapWindow
   282  #define XUnsetICFocus _glfw.x11.xlib.UnsetICFocus
   283  #define XVisualIDFromVisual _glfw.x11.xlib.VisualIDFromVisual
   284  #define XWarpPointer _glfw.x11.xlib.WarpPointer
   285  #define XkbFreeKeyboard _glfw.x11.xkb.FreeKeyboard
   286  #define XkbFreeNames _glfw.x11.xkb.FreeNames
   287  #define XkbGetMap _glfw.x11.xkb.GetMap
   288  #define XkbGetNames _glfw.x11.xkb.GetNames
   289  #define XkbGetState _glfw.x11.xkb.GetState
   290  #define XkbKeycodeToKeysym _glfw.x11.xkb.KeycodeToKeysym
   291  #define XkbQueryExtension _glfw.x11.xkb.QueryExtension
   292  #define XkbSelectEventDetails _glfw.x11.xkb.SelectEventDetails
   293  #define XkbSetDetectableAutoRepeat _glfw.x11.xkb.SetDetectableAutoRepeat
   294  #define XrmDestroyDatabase _glfw.x11.xrm.DestroyDatabase
   295  #define XrmGetResource _glfw.x11.xrm.GetResource
   296  #define XrmGetStringDatabase _glfw.x11.xrm.GetStringDatabase
   297  #define XrmUniqueQuark _glfw.x11.xrm.UniqueQuark
   298  #define XUnregisterIMInstantiateCallback _glfw.x11.xlib.UnregisterIMInstantiateCallback
   299  #define Xutf8LookupString _glfw.x11.xlib.utf8LookupString
   300  #define Xutf8SetWMProperties _glfw.x11.xlib.utf8SetWMProperties
   301  
   302  typedef XRRCrtcGamma* (* PFN_XRRAllocGamma)(int);
   303  typedef void (* PFN_XRRFreeCrtcInfo)(XRRCrtcInfo*);
   304  typedef void (* PFN_XRRFreeGamma)(XRRCrtcGamma*);
   305  typedef void (* PFN_XRRFreeOutputInfo)(XRROutputInfo*);
   306  typedef void (* PFN_XRRFreeScreenResources)(XRRScreenResources*);
   307  typedef XRRCrtcGamma* (* PFN_XRRGetCrtcGamma)(Display*,RRCrtc);
   308  typedef int (* PFN_XRRGetCrtcGammaSize)(Display*,RRCrtc);
   309  typedef XRRCrtcInfo* (* PFN_XRRGetCrtcInfo) (Display*,XRRScreenResources*,RRCrtc);
   310  typedef XRROutputInfo* (* PFN_XRRGetOutputInfo)(Display*,XRRScreenResources*,RROutput);
   311  typedef RROutput (* PFN_XRRGetOutputPrimary)(Display*,Window);
   312  typedef XRRScreenResources* (* PFN_XRRGetScreenResourcesCurrent)(Display*,Window);
   313  typedef Bool (* PFN_XRRQueryExtension)(Display*,int*,int*);
   314  typedef Status (* PFN_XRRQueryVersion)(Display*,int*,int*);
   315  typedef void (* PFN_XRRSelectInput)(Display*,Window,int);
   316  typedef Status (* PFN_XRRSetCrtcConfig)(Display*,XRRScreenResources*,RRCrtc,Time,int,int,RRMode,Rotation,RROutput*,int);
   317  typedef void (* PFN_XRRSetCrtcGamma)(Display*,RRCrtc,XRRCrtcGamma*);
   318  typedef int (* PFN_XRRUpdateConfiguration)(XEvent*);
   319  #define XRRAllocGamma _glfw.x11.randr.AllocGamma
   320  #define XRRFreeCrtcInfo _glfw.x11.randr.FreeCrtcInfo
   321  #define XRRFreeGamma _glfw.x11.randr.FreeGamma
   322  #define XRRFreeOutputInfo _glfw.x11.randr.FreeOutputInfo
   323  #define XRRFreeScreenResources _glfw.x11.randr.FreeScreenResources
   324  #define XRRGetCrtcGamma _glfw.x11.randr.GetCrtcGamma
   325  #define XRRGetCrtcGammaSize _glfw.x11.randr.GetCrtcGammaSize
   326  #define XRRGetCrtcInfo _glfw.x11.randr.GetCrtcInfo
   327  #define XRRGetOutputInfo _glfw.x11.randr.GetOutputInfo
   328  #define XRRGetOutputPrimary _glfw.x11.randr.GetOutputPrimary
   329  #define XRRGetScreenResourcesCurrent _glfw.x11.randr.GetScreenResourcesCurrent
   330  #define XRRQueryExtension _glfw.x11.randr.QueryExtension
   331  #define XRRQueryVersion _glfw.x11.randr.QueryVersion
   332  #define XRRSelectInput _glfw.x11.randr.SelectInput
   333  #define XRRSetCrtcConfig _glfw.x11.randr.SetCrtcConfig
   334  #define XRRSetCrtcGamma _glfw.x11.randr.SetCrtcGamma
   335  #define XRRUpdateConfiguration _glfw.x11.randr.UpdateConfiguration
   336  
   337  typedef XcursorImage* (* PFN_XcursorImageCreate)(int,int);
   338  typedef void (* PFN_XcursorImageDestroy)(XcursorImage*);
   339  typedef Cursor (* PFN_XcursorImageLoadCursor)(Display*,const XcursorImage*);
   340  typedef char* (* PFN_XcursorGetTheme)(Display*);
   341  typedef int (* PFN_XcursorGetDefaultSize)(Display*);
   342  typedef XcursorImage* (* PFN_XcursorLibraryLoadImage)(const char*,const char*,int);
   343  #define XcursorImageCreate _glfw.x11.xcursor.ImageCreate
   344  #define XcursorImageDestroy _glfw.x11.xcursor.ImageDestroy
   345  #define XcursorImageLoadCursor _glfw.x11.xcursor.ImageLoadCursor
   346  #define XcursorGetTheme _glfw.x11.xcursor.GetTheme
   347  #define XcursorGetDefaultSize _glfw.x11.xcursor.GetDefaultSize
   348  #define XcursorLibraryLoadImage _glfw.x11.xcursor.LibraryLoadImage
   349  
   350  typedef Bool (* PFN_XineramaIsActive)(Display*);
   351  typedef Bool (* PFN_XineramaQueryExtension)(Display*,int*,int*);
   352  typedef XineramaScreenInfo* (* PFN_XineramaQueryScreens)(Display*,int*);
   353  #define XineramaIsActive _glfw.x11.xinerama.IsActive
   354  #define XineramaQueryExtension _glfw.x11.xinerama.QueryExtension
   355  #define XineramaQueryScreens _glfw.x11.xinerama.QueryScreens
   356  
   357  typedef XID xcb_window_t;
   358  typedef XID xcb_visualid_t;
   359  typedef struct xcb_connection_t xcb_connection_t;
   360  typedef xcb_connection_t* (* PFN_XGetXCBConnection)(Display*);
   361  #define XGetXCBConnection _glfw.x11.x11xcb.GetXCBConnection
   362  
   363  typedef Bool (* PFN_XF86VidModeQueryExtension)(Display*,int*,int*);
   364  typedef Bool (* PFN_XF86VidModeGetGammaRamp)(Display*,int,int,unsigned short*,unsigned short*,unsigned short*);
   365  typedef Bool (* PFN_XF86VidModeSetGammaRamp)(Display*,int,int,unsigned short*,unsigned short*,unsigned short*);
   366  typedef Bool (* PFN_XF86VidModeGetGammaRampSize)(Display*,int,int*);
   367  #define XF86VidModeQueryExtension _glfw.x11.vidmode.QueryExtension
   368  #define XF86VidModeGetGammaRamp _glfw.x11.vidmode.GetGammaRamp
   369  #define XF86VidModeSetGammaRamp _glfw.x11.vidmode.SetGammaRamp
   370  #define XF86VidModeGetGammaRampSize _glfw.x11.vidmode.GetGammaRampSize
   371  
   372  typedef Status (* PFN_XIQueryVersion)(Display*,int*,int*);
   373  typedef int (* PFN_XISelectEvents)(Display*,Window,XIEventMask*,int);
   374  #define XIQueryVersion _glfw.x11.xi.QueryVersion
   375  #define XISelectEvents _glfw.x11.xi.SelectEvents
   376  
   377  typedef Bool (* PFN_XRenderQueryExtension)(Display*,int*,int*);
   378  typedef Status (* PFN_XRenderQueryVersion)(Display*dpy,int*,int*);
   379  typedef XRenderPictFormat* (* PFN_XRenderFindVisualFormat)(Display*,Visual const*);
   380  #define XRenderQueryExtension _glfw.x11.xrender.QueryExtension
   381  #define XRenderQueryVersion _glfw.x11.xrender.QueryVersion
   382  #define XRenderFindVisualFormat _glfw.x11.xrender.FindVisualFormat
   383  
   384  typedef Bool (* PFN_XShapeQueryExtension)(Display*,int*,int*);
   385  typedef Status (* PFN_XShapeQueryVersion)(Display*dpy,int*,int*);
   386  typedef void (* PFN_XShapeCombineRegion)(Display*,Window,int,int,int,Region,int);
   387  typedef void (* PFN_XShapeCombineMask)(Display*,Window,int,int,int,Pixmap,int);
   388  
   389  #define XShapeQueryExtension _glfw.x11.xshape.QueryExtension
   390  #define XShapeQueryVersion _glfw.x11.xshape.QueryVersion
   391  #define XShapeCombineRegion _glfw.x11.xshape.ShapeCombineRegion
   392  #define XShapeCombineMask _glfw.x11.xshape.ShapeCombineMask
   393  
   394  typedef int (*PFNGLXGETFBCONFIGATTRIBPROC)(Display*,GLXFBConfig,int,int*);
   395  typedef const char* (*PFNGLXGETCLIENTSTRINGPROC)(Display*,int);
   396  typedef Bool (*PFNGLXQUERYEXTENSIONPROC)(Display*,int*,int*);
   397  typedef Bool (*PFNGLXQUERYVERSIONPROC)(Display*,int*,int*);
   398  typedef void (*PFNGLXDESTROYCONTEXTPROC)(Display*,GLXContext);
   399  typedef Bool (*PFNGLXMAKECURRENTPROC)(Display*,GLXDrawable,GLXContext);
   400  typedef void (*PFNGLXSWAPBUFFERSPROC)(Display*,GLXDrawable);
   401  typedef const char* (*PFNGLXQUERYEXTENSIONSSTRINGPROC)(Display*,int);
   402  typedef GLXFBConfig* (*PFNGLXGETFBCONFIGSPROC)(Display*,int,int*);
   403  typedef GLXContext (*PFNGLXCREATENEWCONTEXTPROC)(Display*,GLXFBConfig,int,GLXContext,Bool);
   404  typedef __GLXextproc (* PFNGLXGETPROCADDRESSPROC)(const GLubyte *procName);
   405  typedef void (*PFNGLXSWAPINTERVALEXTPROC)(Display*,GLXDrawable,int);
   406  typedef XVisualInfo* (*PFNGLXGETVISUALFROMFBCONFIGPROC)(Display*,GLXFBConfig);
   407  typedef GLXWindow (*PFNGLXCREATEWINDOWPROC)(Display*,GLXFBConfig,Window,const int*);
   408  typedef void (*PFNGLXDESTROYWINDOWPROC)(Display*,GLXWindow);
   409  
   410  typedef int (*PFNGLXSWAPINTERVALMESAPROC)(int);
   411  typedef int (*PFNGLXSWAPINTERVALSGIPROC)(int);
   412  typedef GLXContext (*PFNGLXCREATECONTEXTATTRIBSARBPROC)(Display*,GLXFBConfig,GLXContext,Bool,const int*);
   413  
   414  // libGL.so function pointer typedefs
   415  #define glXGetFBConfigs _glfw.glx.GetFBConfigs
   416  #define glXGetFBConfigAttrib _glfw.glx.GetFBConfigAttrib
   417  #define glXGetClientString _glfw.glx.GetClientString
   418  #define glXQueryExtension _glfw.glx.QueryExtension
   419  #define glXQueryVersion _glfw.glx.QueryVersion
   420  #define glXDestroyContext _glfw.glx.DestroyContext
   421  #define glXMakeCurrent _glfw.glx.MakeCurrent
   422  #define glXSwapBuffers _glfw.glx.SwapBuffers
   423  #define glXQueryExtensionsString _glfw.glx.QueryExtensionsString
   424  #define glXCreateNewContext _glfw.glx.CreateNewContext
   425  #define glXGetVisualFromFBConfig _glfw.glx.GetVisualFromFBConfig
   426  #define glXCreateWindow _glfw.glx.CreateWindow
   427  #define glXDestroyWindow _glfw.glx.DestroyWindow
   428  
   429  typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
   430  typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
   431  
   432  typedef struct VkXlibSurfaceCreateInfoKHR
   433  {
   434      VkStructureType             sType;
   435      const void*                 pNext;
   436      VkXlibSurfaceCreateFlagsKHR flags;
   437      Display*                    dpy;
   438      Window                      window;
   439  } VkXlibSurfaceCreateInfoKHR;
   440  
   441  typedef struct VkXcbSurfaceCreateInfoKHR
   442  {
   443      VkStructureType             sType;
   444      const void*                 pNext;
   445      VkXcbSurfaceCreateFlagsKHR  flags;
   446      xcb_connection_t*           connection;
   447      xcb_window_t                window;
   448  } VkXcbSurfaceCreateInfoKHR;
   449  
   450  typedef VkResult (APIENTRY *PFN_vkCreateXlibSurfaceKHR)(VkInstance,const VkXlibSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*);
   451  typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice,uint32_t,Display*,VisualID);
   452  typedef VkResult (APIENTRY *PFN_vkCreateXcbSurfaceKHR)(VkInstance,const VkXcbSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*);
   453  typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice,uint32_t,xcb_connection_t*,xcb_visualid_t);
   454  
   455  #include "xkb_unicode.h"
   456  #include "posix_poll.h"
   457  
   458  #define GLFW_X11_WINDOW_STATE           _GLFWwindowX11 x11;
   459  #define GLFW_X11_LIBRARY_WINDOW_STATE   _GLFWlibraryX11 x11;
   460  #define GLFW_X11_MONITOR_STATE          _GLFWmonitorX11 x11;
   461  #define GLFW_X11_CURSOR_STATE           _GLFWcursorX11 x11;
   462  
   463  #define GLFW_GLX_CONTEXT_STATE          _GLFWcontextGLX glx;
   464  #define GLFW_GLX_LIBRARY_CONTEXT_STATE  _GLFWlibraryGLX glx;
   465  
   466  
   467  // GLX-specific per-context data
   468  //
   469  typedef struct _GLFWcontextGLX
   470  {
   471      GLXContext      handle;
   472      GLXWindow       window;
   473  } _GLFWcontextGLX;
   474  
   475  // GLX-specific global data
   476  //
   477  typedef struct _GLFWlibraryGLX
   478  {
   479      int             major, minor;
   480      int             eventBase;
   481      int             errorBase;
   482  
   483      void*           handle;
   484  
   485      // GLX 1.3 functions
   486      PFNGLXGETFBCONFIGSPROC              GetFBConfigs;
   487      PFNGLXGETFBCONFIGATTRIBPROC         GetFBConfigAttrib;
   488      PFNGLXGETCLIENTSTRINGPROC           GetClientString;
   489      PFNGLXQUERYEXTENSIONPROC            QueryExtension;
   490      PFNGLXQUERYVERSIONPROC              QueryVersion;
   491      PFNGLXDESTROYCONTEXTPROC            DestroyContext;
   492      PFNGLXMAKECURRENTPROC               MakeCurrent;
   493      PFNGLXSWAPBUFFERSPROC               SwapBuffers;
   494      PFNGLXQUERYEXTENSIONSSTRINGPROC     QueryExtensionsString;
   495      PFNGLXCREATENEWCONTEXTPROC          CreateNewContext;
   496      PFNGLXGETVISUALFROMFBCONFIGPROC     GetVisualFromFBConfig;
   497      PFNGLXCREATEWINDOWPROC              CreateWindow;
   498      PFNGLXDESTROYWINDOWPROC             DestroyWindow;
   499  
   500      // GLX 1.4 and extension functions
   501      PFNGLXGETPROCADDRESSPROC            GetProcAddress;
   502      PFNGLXGETPROCADDRESSPROC            GetProcAddressARB;
   503      PFNGLXSWAPINTERVALSGIPROC           SwapIntervalSGI;
   504      PFNGLXSWAPINTERVALEXTPROC           SwapIntervalEXT;
   505      PFNGLXSWAPINTERVALMESAPROC          SwapIntervalMESA;
   506      PFNGLXCREATECONTEXTATTRIBSARBPROC   CreateContextAttribsARB;
   507      GLFWbool        SGI_swap_control;
   508      GLFWbool        EXT_swap_control;
   509      GLFWbool        MESA_swap_control;
   510      GLFWbool        ARB_multisample;
   511      GLFWbool        ARB_framebuffer_sRGB;
   512      GLFWbool        EXT_framebuffer_sRGB;
   513      GLFWbool        ARB_create_context;
   514      GLFWbool        ARB_create_context_profile;
   515      GLFWbool        ARB_create_context_robustness;
   516      GLFWbool        EXT_create_context_es2_profile;
   517      GLFWbool        ARB_create_context_no_error;
   518      GLFWbool        ARB_context_flush_control;
   519  } _GLFWlibraryGLX;
   520  
   521  // X11-specific per-window data
   522  //
   523  typedef struct _GLFWwindowX11
   524  {
   525      Colormap        colormap;
   526      Window          handle;
   527      Window          parent;
   528      XIC             ic;
   529  
   530      GLFWbool        overrideRedirect;
   531      GLFWbool        iconified;
   532      GLFWbool        maximized;
   533  
   534      // Whether the visual supports framebuffer transparency
   535      GLFWbool        transparent;
   536  
   537      // Cached position and size used to filter out duplicate events
   538      int             width, height;
   539      int             xpos, ypos;
   540  
   541      // The last received cursor position, regardless of source
   542      int             lastCursorPosX, lastCursorPosY;
   543      // The last position the cursor was warped to by GLFW
   544      int             warpCursorPosX, warpCursorPosY;
   545  
   546      // The time of the last KeyPress event per keycode, for discarding
   547      // duplicate key events generated for some keys by ibus
   548      Time            keyPressTimes[256];
   549  } _GLFWwindowX11;
   550  
   551  // X11-specific global data
   552  //
   553  typedef struct _GLFWlibraryX11
   554  {
   555      Display*        display;
   556      int             screen;
   557      Window          root;
   558  
   559      // System content scale
   560      float           contentScaleX, contentScaleY;
   561      // Helper window for IPC
   562      Window          helperWindowHandle;
   563      // Invisible cursor for hidden cursor mode
   564      Cursor          hiddenCursorHandle;
   565      // Context for mapping window XIDs to _GLFWwindow pointers
   566      XContext        context;
   567      // XIM input method
   568      XIM             im;
   569      // The previous X error handler, to be restored later
   570      XErrorHandler   errorHandler;
   571      // Most recent error code received by X error handler
   572      int             errorCode;
   573      // Primary selection string (while the primary selection is owned)
   574      char*           primarySelectionString;
   575      // Clipboard string (while the selection is owned)
   576      char*           clipboardString;
   577      // Key name string
   578      char            keynames[GLFW_KEY_LAST + 1][5];
   579      // X11 keycode to GLFW key LUT
   580      short int       keycodes[256];
   581      // GLFW key to X11 keycode LUT
   582      short int       scancodes[GLFW_KEY_LAST + 1];
   583      // Where to place the cursor when re-enabled
   584      double          restoreCursorPosX, restoreCursorPosY;
   585      // The window whose disabled cursor mode is active
   586      _GLFWwindow*    disabledCursorWindow;
   587      int             emptyEventPipe[2];
   588  
   589      // Window manager atoms
   590      Atom            NET_SUPPORTED;
   591      Atom            NET_SUPPORTING_WM_CHECK;
   592      Atom            WM_PROTOCOLS;
   593      Atom            WM_STATE;
   594      Atom            WM_DELETE_WINDOW;
   595      Atom            NET_WM_NAME;
   596      Atom            NET_WM_ICON_NAME;
   597      Atom            NET_WM_ICON;
   598      Atom            NET_WM_PID;
   599      Atom            NET_WM_PING;
   600      Atom            NET_WM_WINDOW_TYPE;
   601      Atom            NET_WM_WINDOW_TYPE_NORMAL;
   602      Atom            NET_WM_STATE;
   603      Atom            NET_WM_STATE_ABOVE;
   604      Atom            NET_WM_STATE_FULLSCREEN;
   605      Atom            NET_WM_STATE_MAXIMIZED_VERT;
   606      Atom            NET_WM_STATE_MAXIMIZED_HORZ;
   607      Atom            NET_WM_STATE_DEMANDS_ATTENTION;
   608      Atom            NET_WM_BYPASS_COMPOSITOR;
   609      Atom            NET_WM_FULLSCREEN_MONITORS;
   610      Atom            NET_WM_WINDOW_OPACITY;
   611      Atom            NET_WM_CM_Sx;
   612      Atom            NET_WORKAREA;
   613      Atom            NET_CURRENT_DESKTOP;
   614      Atom            NET_ACTIVE_WINDOW;
   615      Atom            NET_FRAME_EXTENTS;
   616      Atom            NET_REQUEST_FRAME_EXTENTS;
   617      Atom            MOTIF_WM_HINTS;
   618  
   619      // Xdnd (drag and drop) atoms
   620      Atom            XdndAware;
   621      Atom            XdndEnter;
   622      Atom            XdndPosition;
   623      Atom            XdndStatus;
   624      Atom            XdndActionCopy;
   625      Atom            XdndDrop;
   626      Atom            XdndFinished;
   627      Atom            XdndSelection;
   628      Atom            XdndTypeList;
   629      Atom            text_uri_list;
   630  
   631      // Selection (clipboard) atoms
   632      Atom            TARGETS;
   633      Atom            MULTIPLE;
   634      Atom            INCR;
   635      Atom            CLIPBOARD;
   636      Atom            PRIMARY;
   637      Atom            CLIPBOARD_MANAGER;
   638      Atom            SAVE_TARGETS;
   639      Atom            NULL_;
   640      Atom            UTF8_STRING;
   641      Atom            COMPOUND_STRING;
   642      Atom            ATOM_PAIR;
   643      Atom            GLFW_SELECTION;
   644  
   645      struct {
   646          void*       handle;
   647          GLFWbool    utf8;
   648          PFN_XAllocClassHint AllocClassHint;
   649          PFN_XAllocSizeHints AllocSizeHints;
   650          PFN_XAllocWMHints AllocWMHints;
   651          PFN_XChangeProperty ChangeProperty;
   652          PFN_XChangeWindowAttributes ChangeWindowAttributes;
   653          PFN_XCheckIfEvent CheckIfEvent;
   654          PFN_XCheckTypedWindowEvent CheckTypedWindowEvent;
   655          PFN_XCloseDisplay CloseDisplay;
   656          PFN_XCloseIM CloseIM;
   657          PFN_XConvertSelection ConvertSelection;
   658          PFN_XCreateColormap CreateColormap;
   659          PFN_XCreateFontCursor CreateFontCursor;
   660          PFN_XCreateIC CreateIC;
   661          PFN_XCreateRegion CreateRegion;
   662          PFN_XCreateWindow CreateWindow;
   663          PFN_XDefineCursor DefineCursor;
   664          PFN_XDeleteContext DeleteContext;
   665          PFN_XDeleteProperty DeleteProperty;
   666          PFN_XDestroyIC DestroyIC;
   667          PFN_XDestroyRegion DestroyRegion;
   668          PFN_XDestroyWindow DestroyWindow;
   669          PFN_XDisplayKeycodes DisplayKeycodes;
   670          PFN_XEventsQueued EventsQueued;
   671          PFN_XFilterEvent FilterEvent;
   672          PFN_XFindContext FindContext;
   673          PFN_XFlush Flush;
   674          PFN_XFree Free;
   675          PFN_XFreeColormap FreeColormap;
   676          PFN_XFreeCursor FreeCursor;
   677          PFN_XFreeEventData FreeEventData;
   678          PFN_XGetErrorText GetErrorText;
   679          PFN_XGetEventData GetEventData;
   680          PFN_XGetICValues GetICValues;
   681          PFN_XGetIMValues GetIMValues;
   682          PFN_XGetInputFocus GetInputFocus;
   683          PFN_XGetKeyboardMapping GetKeyboardMapping;
   684          PFN_XGetScreenSaver GetScreenSaver;
   685          PFN_XGetSelectionOwner GetSelectionOwner;
   686          PFN_XGetVisualInfo GetVisualInfo;
   687          PFN_XGetWMNormalHints GetWMNormalHints;
   688          PFN_XGetWindowAttributes GetWindowAttributes;
   689          PFN_XGetWindowProperty GetWindowProperty;
   690          PFN_XGrabPointer GrabPointer;
   691          PFN_XIconifyWindow IconifyWindow;
   692          PFN_XInternAtom InternAtom;
   693          PFN_XLookupString LookupString;
   694          PFN_XMapRaised MapRaised;
   695          PFN_XMapWindow MapWindow;
   696          PFN_XMoveResizeWindow MoveResizeWindow;
   697          PFN_XMoveWindow MoveWindow;
   698          PFN_XNextEvent NextEvent;
   699          PFN_XOpenIM OpenIM;
   700          PFN_XPeekEvent PeekEvent;
   701          PFN_XPending Pending;
   702          PFN_XQueryExtension QueryExtension;
   703          PFN_XQueryPointer QueryPointer;
   704          PFN_XRaiseWindow RaiseWindow;
   705          PFN_XRegisterIMInstantiateCallback RegisterIMInstantiateCallback;
   706          PFN_XResizeWindow ResizeWindow;
   707          PFN_XResourceManagerString ResourceManagerString;
   708          PFN_XSaveContext SaveContext;
   709          PFN_XSelectInput SelectInput;
   710          PFN_XSendEvent SendEvent;
   711          PFN_XSetClassHint SetClassHint;
   712          PFN_XSetErrorHandler SetErrorHandler;
   713          PFN_XSetICFocus SetICFocus;
   714          PFN_XSetIMValues SetIMValues;
   715          PFN_XSetInputFocus SetInputFocus;
   716          PFN_XSetLocaleModifiers SetLocaleModifiers;
   717          PFN_XSetScreenSaver SetScreenSaver;
   718          PFN_XSetSelectionOwner SetSelectionOwner;
   719          PFN_XSetWMHints SetWMHints;
   720          PFN_XSetWMNormalHints SetWMNormalHints;
   721          PFN_XSetWMProtocols SetWMProtocols;
   722          PFN_XSupportsLocale SupportsLocale;
   723          PFN_XSync Sync;
   724          PFN_XTranslateCoordinates TranslateCoordinates;
   725          PFN_XUndefineCursor UndefineCursor;
   726          PFN_XUngrabPointer UngrabPointer;
   727          PFN_XUnmapWindow UnmapWindow;
   728          PFN_XUnsetICFocus UnsetICFocus;
   729          PFN_XVisualIDFromVisual VisualIDFromVisual;
   730          PFN_XWarpPointer WarpPointer;
   731          PFN_XUnregisterIMInstantiateCallback UnregisterIMInstantiateCallback;
   732          PFN_Xutf8LookupString utf8LookupString;
   733          PFN_Xutf8SetWMProperties utf8SetWMProperties;
   734      } xlib;
   735  
   736      struct {
   737          PFN_XrmDestroyDatabase DestroyDatabase;
   738          PFN_XrmGetResource GetResource;
   739          PFN_XrmGetStringDatabase GetStringDatabase;
   740          PFN_XrmUniqueQuark UniqueQuark;
   741      } xrm;
   742  
   743      struct {
   744          GLFWbool    available;
   745          void*       handle;
   746          int         eventBase;
   747          int         errorBase;
   748          int         major;
   749          int         minor;
   750          GLFWbool    gammaBroken;
   751          GLFWbool    monitorBroken;
   752          PFN_XRRAllocGamma AllocGamma;
   753          PFN_XRRFreeCrtcInfo FreeCrtcInfo;
   754          PFN_XRRFreeGamma FreeGamma;
   755          PFN_XRRFreeOutputInfo FreeOutputInfo;
   756          PFN_XRRFreeScreenResources FreeScreenResources;
   757          PFN_XRRGetCrtcGamma GetCrtcGamma;
   758          PFN_XRRGetCrtcGammaSize GetCrtcGammaSize;
   759          PFN_XRRGetCrtcInfo GetCrtcInfo;
   760          PFN_XRRGetOutputInfo GetOutputInfo;
   761          PFN_XRRGetOutputPrimary GetOutputPrimary;
   762          PFN_XRRGetScreenResourcesCurrent GetScreenResourcesCurrent;
   763          PFN_XRRQueryExtension QueryExtension;
   764          PFN_XRRQueryVersion QueryVersion;
   765          PFN_XRRSelectInput SelectInput;
   766          PFN_XRRSetCrtcConfig SetCrtcConfig;
   767          PFN_XRRSetCrtcGamma SetCrtcGamma;
   768          PFN_XRRUpdateConfiguration UpdateConfiguration;
   769      } randr;
   770  
   771      struct {
   772          GLFWbool     available;
   773          GLFWbool     detectable;
   774          int          majorOpcode;
   775          int          eventBase;
   776          int          errorBase;
   777          int          major;
   778          int          minor;
   779          unsigned int group;
   780          PFN_XkbFreeKeyboard FreeKeyboard;
   781          PFN_XkbFreeNames FreeNames;
   782          PFN_XkbGetMap GetMap;
   783          PFN_XkbGetNames GetNames;
   784          PFN_XkbGetState GetState;
   785          PFN_XkbKeycodeToKeysym KeycodeToKeysym;
   786          PFN_XkbQueryExtension QueryExtension;
   787          PFN_XkbSelectEventDetails SelectEventDetails;
   788          PFN_XkbSetDetectableAutoRepeat SetDetectableAutoRepeat;
   789      } xkb;
   790  
   791      struct {
   792          int         count;
   793          int         timeout;
   794          int         interval;
   795          int         blanking;
   796          int         exposure;
   797      } saver;
   798  
   799      struct {
   800          int         version;
   801          Window      source;
   802          Atom        format;
   803      } xdnd;
   804  
   805      struct {
   806          void*       handle;
   807          PFN_XcursorImageCreate ImageCreate;
   808          PFN_XcursorImageDestroy ImageDestroy;
   809          PFN_XcursorImageLoadCursor ImageLoadCursor;
   810          PFN_XcursorGetTheme GetTheme;
   811          PFN_XcursorGetDefaultSize GetDefaultSize;
   812          PFN_XcursorLibraryLoadImage LibraryLoadImage;
   813      } xcursor;
   814  
   815      struct {
   816          GLFWbool    available;
   817          void*       handle;
   818          int         major;
   819          int         minor;
   820          PFN_XineramaIsActive IsActive;
   821          PFN_XineramaQueryExtension QueryExtension;
   822          PFN_XineramaQueryScreens QueryScreens;
   823      } xinerama;
   824  
   825      struct {
   826          void*       handle;
   827          PFN_XGetXCBConnection GetXCBConnection;
   828      } x11xcb;
   829  
   830      struct {
   831          GLFWbool    available;
   832          void*       handle;
   833          int         eventBase;
   834          int         errorBase;
   835          PFN_XF86VidModeQueryExtension QueryExtension;
   836          PFN_XF86VidModeGetGammaRamp GetGammaRamp;
   837          PFN_XF86VidModeSetGammaRamp SetGammaRamp;
   838          PFN_XF86VidModeGetGammaRampSize GetGammaRampSize;
   839      } vidmode;
   840  
   841      struct {
   842          GLFWbool    available;
   843          void*       handle;
   844          int         majorOpcode;
   845          int         eventBase;
   846          int         errorBase;
   847          int         major;
   848          int         minor;
   849          PFN_XIQueryVersion QueryVersion;
   850          PFN_XISelectEvents SelectEvents;
   851      } xi;
   852  
   853      struct {
   854          GLFWbool    available;
   855          void*       handle;
   856          int         major;
   857          int         minor;
   858          int         eventBase;
   859          int         errorBase;
   860          PFN_XRenderQueryExtension QueryExtension;
   861          PFN_XRenderQueryVersion QueryVersion;
   862          PFN_XRenderFindVisualFormat FindVisualFormat;
   863      } xrender;
   864  
   865      struct {
   866          GLFWbool    available;
   867          void*       handle;
   868          int         major;
   869          int         minor;
   870          int         eventBase;
   871          int         errorBase;
   872          PFN_XShapeQueryExtension QueryExtension;
   873          PFN_XShapeCombineRegion ShapeCombineRegion;
   874          PFN_XShapeQueryVersion QueryVersion;
   875          PFN_XShapeCombineMask ShapeCombineMask;
   876      } xshape;
   877  } _GLFWlibraryX11;
   878  
   879  // X11-specific per-monitor data
   880  //
   881  typedef struct _GLFWmonitorX11
   882  {
   883      RROutput        output;
   884      RRCrtc          crtc;
   885      RRMode          oldMode;
   886  
   887      // Index of corresponding Xinerama screen,
   888      // for EWMH full screen window placement
   889      int             index;
   890  } _GLFWmonitorX11;
   891  
   892  // X11-specific per-cursor data
   893  //
   894  typedef struct _GLFWcursorX11
   895  {
   896      Cursor handle;
   897  } _GLFWcursorX11;
   898  
   899  
   900  GLFWbool _glfwConnectX11(int platformID, _GLFWplatform* platform);
   901  int _glfwInitX11(void);
   902  void _glfwTerminateX11(void);
   903  
   904  GLFWbool _glfwCreateWindowX11(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig);
   905  void _glfwDestroyWindowX11(_GLFWwindow* window);
   906  void _glfwSetWindowTitleX11(_GLFWwindow* window, const char* title);
   907  void _glfwSetWindowIconX11(_GLFWwindow* window, int count, const GLFWimage* images);
   908  void _glfwGetWindowPosX11(_GLFWwindow* window, int* xpos, int* ypos);
   909  void _glfwSetWindowPosX11(_GLFWwindow* window, int xpos, int ypos);
   910  void _glfwGetWindowSizeX11(_GLFWwindow* window, int* width, int* height);
   911  void _glfwSetWindowSizeX11(_GLFWwindow* window, int width, int height);
   912  void _glfwSetWindowSizeLimitsX11(_GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight);
   913  void _glfwSetWindowAspectRatioX11(_GLFWwindow* window, int numer, int denom);
   914  void _glfwGetFramebufferSizeX11(_GLFWwindow* window, int* width, int* height);
   915  void _glfwGetWindowFrameSizeX11(_GLFWwindow* window, int* left, int* top, int* right, int* bottom);
   916  void _glfwGetWindowContentScaleX11(_GLFWwindow* window, float* xscale, float* yscale);
   917  void _glfwIconifyWindowX11(_GLFWwindow* window);
   918  void _glfwRestoreWindowX11(_GLFWwindow* window);
   919  void _glfwMaximizeWindowX11(_GLFWwindow* window);
   920  void _glfwShowWindowX11(_GLFWwindow* window);
   921  void _glfwHideWindowX11(_GLFWwindow* window);
   922  void _glfwRequestWindowAttentionX11(_GLFWwindow* window);
   923  void _glfwFocusWindowX11(_GLFWwindow* window);
   924  void _glfwSetWindowMonitorX11(_GLFWwindow* window, _GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate);
   925  GLFWbool _glfwWindowFocusedX11(_GLFWwindow* window);
   926  GLFWbool _glfwWindowIconifiedX11(_GLFWwindow* window);
   927  GLFWbool _glfwWindowVisibleX11(_GLFWwindow* window);
   928  GLFWbool _glfwWindowMaximizedX11(_GLFWwindow* window);
   929  GLFWbool _glfwWindowHoveredX11(_GLFWwindow* window);
   930  GLFWbool _glfwFramebufferTransparentX11(_GLFWwindow* window);
   931  void _glfwSetWindowResizableX11(_GLFWwindow* window, GLFWbool enabled);
   932  void _glfwSetWindowDecoratedX11(_GLFWwindow* window, GLFWbool enabled);
   933  void _glfwSetWindowFloatingX11(_GLFWwindow* window, GLFWbool enabled);
   934  float _glfwGetWindowOpacityX11(_GLFWwindow* window);
   935  void _glfwSetWindowOpacityX11(_GLFWwindow* window, float opacity);
   936  void _glfwSetWindowMousePassthroughX11(_GLFWwindow* window, GLFWbool enabled);
   937  
   938  void _glfwSetRawMouseMotionX11(_GLFWwindow *window, GLFWbool enabled);
   939  GLFWbool _glfwRawMouseMotionSupportedX11(void);
   940  
   941  void _glfwPollEventsX11(void);
   942  void _glfwWaitEventsX11(void);
   943  void _glfwWaitEventsTimeoutX11(double timeout);
   944  void _glfwPostEmptyEventX11(void);
   945  
   946  void _glfwGetCursorPosX11(_GLFWwindow* window, double* xpos, double* ypos);
   947  void _glfwSetCursorPosX11(_GLFWwindow* window, double xpos, double ypos);
   948  void _glfwSetCursorModeX11(_GLFWwindow* window, int mode);
   949  const char* _glfwGetScancodeNameX11(int scancode);
   950  int _glfwGetKeyScancodeX11(int key);
   951  GLFWbool _glfwCreateCursorX11(_GLFWcursor* cursor, const GLFWimage* image, int xhot, int yhot);
   952  GLFWbool _glfwCreateStandardCursorX11(_GLFWcursor* cursor, int shape);
   953  void _glfwDestroyCursorX11(_GLFWcursor* cursor);
   954  void _glfwSetCursorX11(_GLFWwindow* window, _GLFWcursor* cursor);
   955  void _glfwSetClipboardStringX11(const char* string);
   956  const char* _glfwGetClipboardStringX11(void);
   957  
   958  EGLenum _glfwGetEGLPlatformX11(EGLint** attribs);
   959  EGLNativeDisplayType _glfwGetEGLNativeDisplayX11(void);
   960  EGLNativeWindowType _glfwGetEGLNativeWindowX11(_GLFWwindow* window);
   961  
   962  void _glfwGetRequiredInstanceExtensionsX11(char** extensions);
   963  GLFWbool _glfwGetPhysicalDevicePresentationSupportX11(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily);
   964  VkResult _glfwCreateWindowSurfaceX11(VkInstance instance, _GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface);
   965  
   966  void _glfwFreeMonitorX11(_GLFWmonitor* monitor);
   967  void _glfwGetMonitorPosX11(_GLFWmonitor* monitor, int* xpos, int* ypos);
   968  void _glfwGetMonitorContentScaleX11(_GLFWmonitor* monitor, float* xscale, float* yscale);
   969  void _glfwGetMonitorWorkareaX11(_GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height);
   970  GLFWvidmode* _glfwGetVideoModesX11(_GLFWmonitor* monitor, int* count);
   971  void _glfwGetVideoModeX11(_GLFWmonitor* monitor, GLFWvidmode* mode);
   972  GLFWbool _glfwGetGammaRampX11(_GLFWmonitor* monitor, GLFWgammaramp* ramp);
   973  void _glfwSetGammaRampX11(_GLFWmonitor* monitor, const GLFWgammaramp* ramp);
   974  
   975  void _glfwPollMonitorsX11(void);
   976  void _glfwSetVideoModeX11(_GLFWmonitor* monitor, const GLFWvidmode* desired);
   977  void _glfwRestoreVideoModeX11(_GLFWmonitor* monitor);
   978  
   979  Cursor _glfwCreateNativeCursorX11(const GLFWimage* image, int xhot, int yhot);
   980  
   981  unsigned long _glfwGetWindowPropertyX11(Window window,
   982                                          Atom property,
   983                                          Atom type,
   984                                          unsigned char** value);
   985  GLFWbool _glfwIsVisualTransparentX11(Visual* visual);
   986  
   987  void _glfwGrabErrorHandlerX11(void);
   988  void _glfwReleaseErrorHandlerX11(void);
   989  void _glfwInputErrorX11(int error, const char* message);
   990  
   991  void _glfwPushSelectionToManagerX11(void);
   992  void _glfwCreateInputContextX11(_GLFWwindow* window);
   993  
   994  GLFWbool _glfwInitGLX(void);
   995  void _glfwTerminateGLX(void);
   996  GLFWbool _glfwCreateContextGLX(_GLFWwindow* window,
   997                                 const _GLFWctxconfig* ctxconfig,
   998                                 const _GLFWfbconfig* fbconfig);
   999  void _glfwDestroyContextGLX(_GLFWwindow* window);
  1000  GLFWbool _glfwChooseVisualGLX(const _GLFWwndconfig* wndconfig,
  1001                                const _GLFWctxconfig* ctxconfig,
  1002                                const _GLFWfbconfig* fbconfig,
  1003                                Visual** visual, int* depth);
  1004