migrating to the latest JUCE version
This commit is contained in:
		
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,240 +1,240 @@
 | 
			
		||||
/*
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
   This file is part of the JUCE library.
 | 
			
		||||
   Copyright (c) 2020 - Raw Material Software Limited
 | 
			
		||||
 | 
			
		||||
   JUCE is an open source library subject to commercial or open-source
 | 
			
		||||
   licensing.
 | 
			
		||||
 | 
			
		||||
   By using JUCE, you agree to the terms of both the JUCE 6 End-User License
 | 
			
		||||
   Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
 | 
			
		||||
 | 
			
		||||
   End User License Agreement: www.juce.com/juce-6-licence
 | 
			
		||||
   Privacy Policy: www.juce.com/juce-privacy-policy
 | 
			
		||||
 | 
			
		||||
   Or: You may also use this code under the terms of the GPL v3 (see
 | 
			
		||||
   www.gnu.org/licenses).
 | 
			
		||||
 | 
			
		||||
   JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
 | 
			
		||||
   EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
 | 
			
		||||
   DISCLAIMED.
 | 
			
		||||
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace juce
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
namespace X11SymbolHelpers
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr>
 | 
			
		||||
struct SymbolBinding
 | 
			
		||||
{
 | 
			
		||||
    FuncPtr& func;
 | 
			
		||||
    const char* name;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr>
 | 
			
		||||
SymbolBinding<FuncPtr> makeSymbolBinding (FuncPtr& func, const char* name)
 | 
			
		||||
{
 | 
			
		||||
    return { func, name };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr>
 | 
			
		||||
bool loadSymbols (DynamicLibrary& lib, SymbolBinding<FuncPtr> binding)
 | 
			
		||||
{
 | 
			
		||||
    if (auto* func = lib.getFunction (binding.name))
 | 
			
		||||
    {
 | 
			
		||||
        binding.func = reinterpret_cast<FuncPtr> (func);
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr, typename... Args>
 | 
			
		||||
bool loadSymbols (DynamicLibrary& lib1, DynamicLibrary& lib2, SymbolBinding<FuncPtr> binding)
 | 
			
		||||
{
 | 
			
		||||
    return loadSymbols (lib1, binding) || loadSymbols (lib2, binding);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr, typename... Args>
 | 
			
		||||
bool loadSymbols (DynamicLibrary& lib, SymbolBinding<FuncPtr> binding, Args... args)
 | 
			
		||||
{
 | 
			
		||||
    return loadSymbols (lib, binding) && loadSymbols (lib, args...);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr, typename... Args>
 | 
			
		||||
bool loadSymbols (DynamicLibrary& lib1, DynamicLibrary& lib2, SymbolBinding<FuncPtr> binding, Args... args)
 | 
			
		||||
{
 | 
			
		||||
    return loadSymbols (lib1, lib2, binding) && loadSymbols (lib1, lib2, args...);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
bool X11Symbols::loadAllSymbols()
 | 
			
		||||
{
 | 
			
		||||
    using namespace X11SymbolHelpers;
 | 
			
		||||
 | 
			
		||||
    if (! loadSymbols (xLib, xextLib,
 | 
			
		||||
                       makeSymbolBinding (xAllocClassHint,             "XAllocClassHint"),
 | 
			
		||||
                       makeSymbolBinding (xAllocSizeHints,             "XAllocSizeHints"),
 | 
			
		||||
                       makeSymbolBinding (xAllocWMHints,               "XAllocWMHints"),
 | 
			
		||||
                       makeSymbolBinding (xBitmapBitOrder,             "XBitmapBitOrder"),
 | 
			
		||||
                       makeSymbolBinding (xBitmapUnit,                 "XBitmapUnit"),
 | 
			
		||||
                       makeSymbolBinding (xChangeActivePointerGrab,    "XChangeActivePointerGrab"),
 | 
			
		||||
                       makeSymbolBinding (xChangeProperty,             "XChangeProperty"),
 | 
			
		||||
                       makeSymbolBinding (xCheckTypedWindowEvent,      "XCheckTypedWindowEvent"),
 | 
			
		||||
                       makeSymbolBinding (xCheckWindowEvent,           "XCheckWindowEvent"),
 | 
			
		||||
                       makeSymbolBinding (xClearArea,                  "XClearArea"),
 | 
			
		||||
                       makeSymbolBinding (xCloseDisplay,               "XCloseDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xConnectionNumber,           "XConnectionNumber"),
 | 
			
		||||
                       makeSymbolBinding (xConvertSelection,           "XConvertSelection"),
 | 
			
		||||
                       makeSymbolBinding (xCreateColormap,             "XCreateColormap"),
 | 
			
		||||
                       makeSymbolBinding (xCreateFontCursor,           "XCreateFontCursor"),
 | 
			
		||||
                       makeSymbolBinding (xCreateGC,                   "XCreateGC"),
 | 
			
		||||
                       makeSymbolBinding (xCreateImage,                "XCreateImage"),
 | 
			
		||||
                       makeSymbolBinding (xCreatePixmap,               "XCreatePixmap"),
 | 
			
		||||
                       makeSymbolBinding (xCreatePixmapCursor,         "XCreatePixmapCursor"),
 | 
			
		||||
                       makeSymbolBinding (xCreatePixmapFromBitmapData, "XCreatePixmapFromBitmapData"),
 | 
			
		||||
                       makeSymbolBinding (xCreateWindow,               "XCreateWindow"),
 | 
			
		||||
                       makeSymbolBinding (xDefaultRootWindow,          "XDefaultRootWindow"),
 | 
			
		||||
                       makeSymbolBinding (xDefaultScreen,              "XDefaultScreen"),
 | 
			
		||||
                       makeSymbolBinding (xDefaultScreenOfDisplay,     "XDefaultScreenOfDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xDefaultVisual,              "XDefaultVisual"),
 | 
			
		||||
                       makeSymbolBinding (xDefineCursor,               "XDefineCursor"),
 | 
			
		||||
                       makeSymbolBinding (xDeleteContext,              "XDeleteContext"),
 | 
			
		||||
                       makeSymbolBinding (xDeleteProperty,             "XDeleteProperty"),
 | 
			
		||||
                       makeSymbolBinding (xDestroyImage,               "XDestroyImage"),
 | 
			
		||||
                       makeSymbolBinding (xDestroyWindow,              "XDestroyWindow"),
 | 
			
		||||
                       makeSymbolBinding (xDisplayHeight,              "XDisplayHeight"),
 | 
			
		||||
                       makeSymbolBinding (xDisplayHeightMM,            "XDisplayHeightMM"),
 | 
			
		||||
                       makeSymbolBinding (xDisplayWidth,               "XDisplayWidth"),
 | 
			
		||||
                       makeSymbolBinding (xDisplayWidthMM,             "XDisplayWidthMM"),
 | 
			
		||||
                       makeSymbolBinding (xEventsQueued,               "XEventsQueued"),
 | 
			
		||||
                       makeSymbolBinding (xFindContext,                "XFindContext"),
 | 
			
		||||
                       makeSymbolBinding (xFlush,                      "XFlush"),
 | 
			
		||||
                       makeSymbolBinding (xFree,                       "XFree"),
 | 
			
		||||
                       makeSymbolBinding (xFreeCursor,                 "XFreeCursor"),
 | 
			
		||||
                       makeSymbolBinding (xFreeColormap,               "XFreeColormap"),
 | 
			
		||||
                       makeSymbolBinding (xFreeGC,                     "XFreeGC"),
 | 
			
		||||
                       makeSymbolBinding (xFreeModifiermap,            "XFreeModifiermap"),
 | 
			
		||||
                       makeSymbolBinding (xFreePixmap,                 "XFreePixmap"),
 | 
			
		||||
                       makeSymbolBinding (xGetAtomName,                "XGetAtomName"),
 | 
			
		||||
                       makeSymbolBinding (xGetErrorDatabaseText,       "XGetErrorDatabaseText"),
 | 
			
		||||
                       makeSymbolBinding (xGetErrorText,               "XGetErrorText"),
 | 
			
		||||
                       makeSymbolBinding (xGetGeometry,                "XGetGeometry"),
 | 
			
		||||
                       makeSymbolBinding (xGetImage,                   "XGetImage"),
 | 
			
		||||
                       makeSymbolBinding (xGetInputFocus,              "XGetInputFocus"),
 | 
			
		||||
                       makeSymbolBinding (xGetModifierMapping,         "XGetModifierMapping"),
 | 
			
		||||
                       makeSymbolBinding (xGetPointerMapping,          "XGetPointerMapping"),
 | 
			
		||||
                       makeSymbolBinding (xGetSelectionOwner,          "XGetSelectionOwner"),
 | 
			
		||||
                       makeSymbolBinding (xGetVisualInfo,              "XGetVisualInfo"),
 | 
			
		||||
                       makeSymbolBinding (xGetWMHints,                 "XGetWMHints"),
 | 
			
		||||
                       makeSymbolBinding (xGetWindowAttributes,        "XGetWindowAttributes"),
 | 
			
		||||
                       makeSymbolBinding (xGetWindowProperty,          "XGetWindowProperty"),
 | 
			
		||||
                       makeSymbolBinding (xGrabPointer,                "XGrabPointer"),
 | 
			
		||||
                       makeSymbolBinding (xGrabServer,                 "XGrabServer"),
 | 
			
		||||
                       makeSymbolBinding (xImageByteOrder,             "XImageByteOrder"),
 | 
			
		||||
                       makeSymbolBinding (xInitImage,                  "XInitImage"),
 | 
			
		||||
                       makeSymbolBinding (xInitThreads,                "XInitThreads"),
 | 
			
		||||
                       makeSymbolBinding (xInstallColormap,            "XInstallColormap"),
 | 
			
		||||
                       makeSymbolBinding (xInternAtom,                 "XInternAtom"),
 | 
			
		||||
                       makeSymbolBinding (xkbKeycodeToKeysym,          "XkbKeycodeToKeysym"),
 | 
			
		||||
                       makeSymbolBinding (xKeysymToKeycode,            "XKeysymToKeycode"),
 | 
			
		||||
                       makeSymbolBinding (xListProperties,             "XListProperties"),
 | 
			
		||||
                       makeSymbolBinding (xLockDisplay,                "XLockDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xLookupString,               "XLookupString"),
 | 
			
		||||
                       makeSymbolBinding (xMapRaised,                  "XMapRaised"),
 | 
			
		||||
                       makeSymbolBinding (xMapWindow,                  "XMapWindow"),
 | 
			
		||||
                       makeSymbolBinding (xMoveResizeWindow,           "XMoveResizeWindow"),
 | 
			
		||||
                       makeSymbolBinding (xNextEvent,                  "XNextEvent"),
 | 
			
		||||
                       makeSymbolBinding (xOpenDisplay,                "XOpenDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xPeekEvent,                  "XPeekEvent"),
 | 
			
		||||
                       makeSymbolBinding (xPending,                    "XPending"),
 | 
			
		||||
                       makeSymbolBinding (xPutImage,                   "XPutImage"),
 | 
			
		||||
                       makeSymbolBinding (xPutPixel,                   "XPutPixel"),
 | 
			
		||||
                       makeSymbolBinding (xQueryBestCursor,            "XQueryBestCursor"),
 | 
			
		||||
                       makeSymbolBinding (xQueryExtension,             "XQueryExtension"),
 | 
			
		||||
                       makeSymbolBinding (xQueryPointer,               "XQueryPointer"),
 | 
			
		||||
                       makeSymbolBinding (xQueryTree,                  "XQueryTree"),
 | 
			
		||||
                       makeSymbolBinding (xRefreshKeyboardMapping,     "XRefreshKeyboardMapping"),
 | 
			
		||||
                       makeSymbolBinding (xReparentWindow,             "XReparentWindow"),
 | 
			
		||||
                       makeSymbolBinding (xResizeWindow,               "XResizeWindow"),
 | 
			
		||||
                       makeSymbolBinding (xRestackWindows,             "XRestackWindows"),
 | 
			
		||||
                       makeSymbolBinding (xRootWindow,                 "XRootWindow"),
 | 
			
		||||
                       makeSymbolBinding (xSaveContext,                "XSaveContext"),
 | 
			
		||||
                       makeSymbolBinding (xScreenCount,                "XScreenCount"),
 | 
			
		||||
                       makeSymbolBinding (xScreenNumberOfScreen,       "XScreenNumberOfScreen"),
 | 
			
		||||
                       makeSymbolBinding (xSelectInput,                "XSelectInput"),
 | 
			
		||||
                       makeSymbolBinding (xSendEvent,                  "XSendEvent"),
 | 
			
		||||
                       makeSymbolBinding (xSetClassHint,               "XSetClassHint"),
 | 
			
		||||
                       makeSymbolBinding (xSetErrorHandler,            "XSetErrorHandler"),
 | 
			
		||||
                       makeSymbolBinding (xSetIOErrorHandler,          "XSetIOErrorHandler"),
 | 
			
		||||
                       makeSymbolBinding (xSetInputFocus,              "XSetInputFocus"),
 | 
			
		||||
                       makeSymbolBinding (xSetSelectionOwner,          "XSetSelectionOwner"),
 | 
			
		||||
                       makeSymbolBinding (xSetWMHints,                 "XSetWMHints"),
 | 
			
		||||
                       makeSymbolBinding (xSetWMIconName,              "XSetWMIconName"),
 | 
			
		||||
                       makeSymbolBinding (xSetWMName,                  "XSetWMName"),
 | 
			
		||||
                       makeSymbolBinding (xSetWMNormalHints,           "XSetWMNormalHints"),
 | 
			
		||||
                       makeSymbolBinding (xStringListToTextProperty,   "XStringListToTextProperty"),
 | 
			
		||||
                       makeSymbolBinding (xSync,                       "XSync"),
 | 
			
		||||
                       makeSymbolBinding (xSynchronize,                "XSynchronize"),
 | 
			
		||||
                       makeSymbolBinding (xTranslateCoordinates,       "XTranslateCoordinates"),
 | 
			
		||||
                       makeSymbolBinding (xrmUniqueQuark,              "XrmUniqueQuark"),
 | 
			
		||||
                       makeSymbolBinding (xUngrabPointer,              "XUngrabPointer"),
 | 
			
		||||
                       makeSymbolBinding (xUngrabServer,               "XUngrabServer"),
 | 
			
		||||
                       makeSymbolBinding (xUnlockDisplay,              "XUnlockDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xUnmapWindow,                "XUnmapWindow"),
 | 
			
		||||
                       makeSymbolBinding (xutf8TextListToTextProperty, "Xutf8TextListToTextProperty"),
 | 
			
		||||
                       makeSymbolBinding (xWarpPointer,                "XWarpPointer")))
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
   #if JUCE_USE_XCURSOR
 | 
			
		||||
    loadSymbols (xcursorLib,
 | 
			
		||||
                 makeSymbolBinding (xcursorImageCreate,          "XcursorImageCreate"),
 | 
			
		||||
                 makeSymbolBinding (xcursorImageLoadCursor,      "XcursorImageLoadCursor"),
 | 
			
		||||
                 makeSymbolBinding (xcursorImageDestroy,         "XcursorImageDestroy"));
 | 
			
		||||
   #endif
 | 
			
		||||
   #if JUCE_USE_XINERAMA
 | 
			
		||||
    loadSymbols (xineramaLib,
 | 
			
		||||
                 makeSymbolBinding (xineramaIsActive,            "XineramaIsActive"),
 | 
			
		||||
                 makeSymbolBinding (xineramaQueryScreens,        "XineramaQueryScreens"));
 | 
			
		||||
   #endif
 | 
			
		||||
   #if JUCE_USE_XRENDER
 | 
			
		||||
    loadSymbols (xrenderLib,
 | 
			
		||||
                 makeSymbolBinding (xRenderQueryVersion,         "XRenderQueryVersion"),
 | 
			
		||||
                 makeSymbolBinding (xRenderFindStandardFormat,   "XRenderFindStandardFormat"),
 | 
			
		||||
                 makeSymbolBinding (xRenderFindFormat,           "XRenderFindFormat"),
 | 
			
		||||
                 makeSymbolBinding (xRenderFindVisualFormat,     "XRenderFindVisualFormat"));
 | 
			
		||||
   #endif
 | 
			
		||||
   #if JUCE_USE_XRANDR
 | 
			
		||||
    loadSymbols (xrandrLib,
 | 
			
		||||
                 makeSymbolBinding (xRRGetScreenResources,       "XRRGetScreenResources"),
 | 
			
		||||
                 makeSymbolBinding (xRRFreeScreenResources,      "XRRFreeScreenResources"),
 | 
			
		||||
                 makeSymbolBinding (xRRGetOutputInfo,            "XRRGetOutputInfo"),
 | 
			
		||||
                 makeSymbolBinding (xRRFreeOutputInfo,           "XRRFreeOutputInfo"),
 | 
			
		||||
                 makeSymbolBinding (xRRGetCrtcInfo,              "XRRGetCrtcInfo"),
 | 
			
		||||
                 makeSymbolBinding (xRRFreeCrtcInfo,             "XRRFreeCrtcInfo"),
 | 
			
		||||
                 makeSymbolBinding (xRRGetOutputPrimary,         "XRRGetOutputPrimary"));
 | 
			
		||||
   #endif
 | 
			
		||||
   #if JUCE_USE_XSHM
 | 
			
		||||
    loadSymbols (xLib, xextLib,
 | 
			
		||||
                 makeSymbolBinding (xShmAttach,                  "XShmAttach"),
 | 
			
		||||
                 makeSymbolBinding (xShmCreateImage,             "XShmCreateImage"),
 | 
			
		||||
                 makeSymbolBinding (xShmDetach,                  "XShmDetach"),
 | 
			
		||||
                 makeSymbolBinding (xShmGetEventBase,            "XShmGetEventBase"),
 | 
			
		||||
                 makeSymbolBinding (xShmPutImage,                "XShmPutImage"),
 | 
			
		||||
                 makeSymbolBinding (xShmQueryVersion,            "XShmQueryVersion"));
 | 
			
		||||
   #endif
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
JUCE_IMPLEMENT_SINGLETON (X11Symbols)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
   This file is part of the JUCE library.
 | 
			
		||||
   Copyright (c) 2022 - Raw Material Software Limited
 | 
			
		||||
 | 
			
		||||
   JUCE is an open source library subject to commercial or open-source
 | 
			
		||||
   licensing.
 | 
			
		||||
 | 
			
		||||
   By using JUCE, you agree to the terms of both the JUCE 7 End-User License
 | 
			
		||||
   Agreement and JUCE Privacy Policy.
 | 
			
		||||
 | 
			
		||||
   End User License Agreement: www.juce.com/juce-7-licence
 | 
			
		||||
   Privacy Policy: www.juce.com/juce-privacy-policy
 | 
			
		||||
 | 
			
		||||
   Or: You may also use this code under the terms of the GPL v3 (see
 | 
			
		||||
   www.gnu.org/licenses).
 | 
			
		||||
 | 
			
		||||
   JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
 | 
			
		||||
   EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
 | 
			
		||||
   DISCLAIMED.
 | 
			
		||||
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace juce
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
namespace X11SymbolHelpers
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr>
 | 
			
		||||
struct SymbolBinding
 | 
			
		||||
{
 | 
			
		||||
    FuncPtr& func;
 | 
			
		||||
    const char* name;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr>
 | 
			
		||||
SymbolBinding<FuncPtr> makeSymbolBinding (FuncPtr& func, const char* name)
 | 
			
		||||
{
 | 
			
		||||
    return { func, name };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr>
 | 
			
		||||
bool loadSymbols (DynamicLibrary& lib, SymbolBinding<FuncPtr> binding)
 | 
			
		||||
{
 | 
			
		||||
    if (auto* func = lib.getFunction (binding.name))
 | 
			
		||||
    {
 | 
			
		||||
        binding.func = reinterpret_cast<FuncPtr> (func);
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr, typename... Args>
 | 
			
		||||
bool loadSymbols (DynamicLibrary& lib1, DynamicLibrary& lib2, SymbolBinding<FuncPtr> binding)
 | 
			
		||||
{
 | 
			
		||||
    return loadSymbols (lib1, binding) || loadSymbols (lib2, binding);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr, typename... Args>
 | 
			
		||||
bool loadSymbols (DynamicLibrary& lib, SymbolBinding<FuncPtr> binding, Args... args)
 | 
			
		||||
{
 | 
			
		||||
    return loadSymbols (lib, binding) && loadSymbols (lib, args...);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FuncPtr, typename... Args>
 | 
			
		||||
bool loadSymbols (DynamicLibrary& lib1, DynamicLibrary& lib2, SymbolBinding<FuncPtr> binding, Args... args)
 | 
			
		||||
{
 | 
			
		||||
    return loadSymbols (lib1, lib2, binding) && loadSymbols (lib1, lib2, args...);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
bool X11Symbols::loadAllSymbols()
 | 
			
		||||
{
 | 
			
		||||
    using namespace X11SymbolHelpers;
 | 
			
		||||
 | 
			
		||||
    if (! loadSymbols (xLib, xextLib,
 | 
			
		||||
                       makeSymbolBinding (xAllocClassHint,             "XAllocClassHint"),
 | 
			
		||||
                       makeSymbolBinding (xAllocSizeHints,             "XAllocSizeHints"),
 | 
			
		||||
                       makeSymbolBinding (xAllocWMHints,               "XAllocWMHints"),
 | 
			
		||||
                       makeSymbolBinding (xBitmapBitOrder,             "XBitmapBitOrder"),
 | 
			
		||||
                       makeSymbolBinding (xBitmapUnit,                 "XBitmapUnit"),
 | 
			
		||||
                       makeSymbolBinding (xChangeActivePointerGrab,    "XChangeActivePointerGrab"),
 | 
			
		||||
                       makeSymbolBinding (xChangeProperty,             "XChangeProperty"),
 | 
			
		||||
                       makeSymbolBinding (xCheckTypedWindowEvent,      "XCheckTypedWindowEvent"),
 | 
			
		||||
                       makeSymbolBinding (xCheckWindowEvent,           "XCheckWindowEvent"),
 | 
			
		||||
                       makeSymbolBinding (xClearArea,                  "XClearArea"),
 | 
			
		||||
                       makeSymbolBinding (xCloseDisplay,               "XCloseDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xConnectionNumber,           "XConnectionNumber"),
 | 
			
		||||
                       makeSymbolBinding (xConvertSelection,           "XConvertSelection"),
 | 
			
		||||
                       makeSymbolBinding (xCreateColormap,             "XCreateColormap"),
 | 
			
		||||
                       makeSymbolBinding (xCreateFontCursor,           "XCreateFontCursor"),
 | 
			
		||||
                       makeSymbolBinding (xCreateGC,                   "XCreateGC"),
 | 
			
		||||
                       makeSymbolBinding (xCreateImage,                "XCreateImage"),
 | 
			
		||||
                       makeSymbolBinding (xCreatePixmap,               "XCreatePixmap"),
 | 
			
		||||
                       makeSymbolBinding (xCreatePixmapCursor,         "XCreatePixmapCursor"),
 | 
			
		||||
                       makeSymbolBinding (xCreatePixmapFromBitmapData, "XCreatePixmapFromBitmapData"),
 | 
			
		||||
                       makeSymbolBinding (xCreateWindow,               "XCreateWindow"),
 | 
			
		||||
                       makeSymbolBinding (xDefaultRootWindow,          "XDefaultRootWindow"),
 | 
			
		||||
                       makeSymbolBinding (xDefaultScreen,              "XDefaultScreen"),
 | 
			
		||||
                       makeSymbolBinding (xDefaultScreenOfDisplay,     "XDefaultScreenOfDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xDefaultVisual,              "XDefaultVisual"),
 | 
			
		||||
                       makeSymbolBinding (xDefineCursor,               "XDefineCursor"),
 | 
			
		||||
                       makeSymbolBinding (xDeleteContext,              "XDeleteContext"),
 | 
			
		||||
                       makeSymbolBinding (xDeleteProperty,             "XDeleteProperty"),
 | 
			
		||||
                       makeSymbolBinding (xDestroyImage,               "XDestroyImage"),
 | 
			
		||||
                       makeSymbolBinding (xDestroyWindow,              "XDestroyWindow"),
 | 
			
		||||
                       makeSymbolBinding (xDisplayHeight,              "XDisplayHeight"),
 | 
			
		||||
                       makeSymbolBinding (xDisplayHeightMM,            "XDisplayHeightMM"),
 | 
			
		||||
                       makeSymbolBinding (xDisplayWidth,               "XDisplayWidth"),
 | 
			
		||||
                       makeSymbolBinding (xDisplayWidthMM,             "XDisplayWidthMM"),
 | 
			
		||||
                       makeSymbolBinding (xEventsQueued,               "XEventsQueued"),
 | 
			
		||||
                       makeSymbolBinding (xFindContext,                "XFindContext"),
 | 
			
		||||
                       makeSymbolBinding (xFlush,                      "XFlush"),
 | 
			
		||||
                       makeSymbolBinding (xFree,                       "XFree"),
 | 
			
		||||
                       makeSymbolBinding (xFreeCursor,                 "XFreeCursor"),
 | 
			
		||||
                       makeSymbolBinding (xFreeColormap,               "XFreeColormap"),
 | 
			
		||||
                       makeSymbolBinding (xFreeGC,                     "XFreeGC"),
 | 
			
		||||
                       makeSymbolBinding (xFreeModifiermap,            "XFreeModifiermap"),
 | 
			
		||||
                       makeSymbolBinding (xFreePixmap,                 "XFreePixmap"),
 | 
			
		||||
                       makeSymbolBinding (xGetAtomName,                "XGetAtomName"),
 | 
			
		||||
                       makeSymbolBinding (xGetErrorDatabaseText,       "XGetErrorDatabaseText"),
 | 
			
		||||
                       makeSymbolBinding (xGetErrorText,               "XGetErrorText"),
 | 
			
		||||
                       makeSymbolBinding (xGetGeometry,                "XGetGeometry"),
 | 
			
		||||
                       makeSymbolBinding (xGetImage,                   "XGetImage"),
 | 
			
		||||
                       makeSymbolBinding (xGetInputFocus,              "XGetInputFocus"),
 | 
			
		||||
                       makeSymbolBinding (xGetModifierMapping,         "XGetModifierMapping"),
 | 
			
		||||
                       makeSymbolBinding (xGetPointerMapping,          "XGetPointerMapping"),
 | 
			
		||||
                       makeSymbolBinding (xGetSelectionOwner,          "XGetSelectionOwner"),
 | 
			
		||||
                       makeSymbolBinding (xGetVisualInfo,              "XGetVisualInfo"),
 | 
			
		||||
                       makeSymbolBinding (xGetWMHints,                 "XGetWMHints"),
 | 
			
		||||
                       makeSymbolBinding (xGetWindowAttributes,        "XGetWindowAttributes"),
 | 
			
		||||
                       makeSymbolBinding (xGetWindowProperty,          "XGetWindowProperty"),
 | 
			
		||||
                       makeSymbolBinding (xGrabPointer,                "XGrabPointer"),
 | 
			
		||||
                       makeSymbolBinding (xGrabServer,                 "XGrabServer"),
 | 
			
		||||
                       makeSymbolBinding (xImageByteOrder,             "XImageByteOrder"),
 | 
			
		||||
                       makeSymbolBinding (xInitImage,                  "XInitImage"),
 | 
			
		||||
                       makeSymbolBinding (xInitThreads,                "XInitThreads"),
 | 
			
		||||
                       makeSymbolBinding (xInstallColormap,            "XInstallColormap"),
 | 
			
		||||
                       makeSymbolBinding (xInternAtom,                 "XInternAtom"),
 | 
			
		||||
                       makeSymbolBinding (xkbKeycodeToKeysym,          "XkbKeycodeToKeysym"),
 | 
			
		||||
                       makeSymbolBinding (xKeysymToKeycode,            "XKeysymToKeycode"),
 | 
			
		||||
                       makeSymbolBinding (xListProperties,             "XListProperties"),
 | 
			
		||||
                       makeSymbolBinding (xLockDisplay,                "XLockDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xLookupString,               "XLookupString"),
 | 
			
		||||
                       makeSymbolBinding (xMapRaised,                  "XMapRaised"),
 | 
			
		||||
                       makeSymbolBinding (xMapWindow,                  "XMapWindow"),
 | 
			
		||||
                       makeSymbolBinding (xMoveResizeWindow,           "XMoveResizeWindow"),
 | 
			
		||||
                       makeSymbolBinding (xNextEvent,                  "XNextEvent"),
 | 
			
		||||
                       makeSymbolBinding (xOpenDisplay,                "XOpenDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xPeekEvent,                  "XPeekEvent"),
 | 
			
		||||
                       makeSymbolBinding (xPending,                    "XPending"),
 | 
			
		||||
                       makeSymbolBinding (xPutImage,                   "XPutImage"),
 | 
			
		||||
                       makeSymbolBinding (xPutPixel,                   "XPutPixel"),
 | 
			
		||||
                       makeSymbolBinding (xQueryBestCursor,            "XQueryBestCursor"),
 | 
			
		||||
                       makeSymbolBinding (xQueryExtension,             "XQueryExtension"),
 | 
			
		||||
                       makeSymbolBinding (xQueryPointer,               "XQueryPointer"),
 | 
			
		||||
                       makeSymbolBinding (xQueryTree,                  "XQueryTree"),
 | 
			
		||||
                       makeSymbolBinding (xRefreshKeyboardMapping,     "XRefreshKeyboardMapping"),
 | 
			
		||||
                       makeSymbolBinding (xReparentWindow,             "XReparentWindow"),
 | 
			
		||||
                       makeSymbolBinding (xResizeWindow,               "XResizeWindow"),
 | 
			
		||||
                       makeSymbolBinding (xRestackWindows,             "XRestackWindows"),
 | 
			
		||||
                       makeSymbolBinding (xRootWindow,                 "XRootWindow"),
 | 
			
		||||
                       makeSymbolBinding (xSaveContext,                "XSaveContext"),
 | 
			
		||||
                       makeSymbolBinding (xScreenCount,                "XScreenCount"),
 | 
			
		||||
                       makeSymbolBinding (xScreenNumberOfScreen,       "XScreenNumberOfScreen"),
 | 
			
		||||
                       makeSymbolBinding (xSelectInput,                "XSelectInput"),
 | 
			
		||||
                       makeSymbolBinding (xSendEvent,                  "XSendEvent"),
 | 
			
		||||
                       makeSymbolBinding (xSetClassHint,               "XSetClassHint"),
 | 
			
		||||
                       makeSymbolBinding (xSetErrorHandler,            "XSetErrorHandler"),
 | 
			
		||||
                       makeSymbolBinding (xSetIOErrorHandler,          "XSetIOErrorHandler"),
 | 
			
		||||
                       makeSymbolBinding (xSetInputFocus,              "XSetInputFocus"),
 | 
			
		||||
                       makeSymbolBinding (xSetSelectionOwner,          "XSetSelectionOwner"),
 | 
			
		||||
                       makeSymbolBinding (xSetWMHints,                 "XSetWMHints"),
 | 
			
		||||
                       makeSymbolBinding (xSetWMIconName,              "XSetWMIconName"),
 | 
			
		||||
                       makeSymbolBinding (xSetWMName,                  "XSetWMName"),
 | 
			
		||||
                       makeSymbolBinding (xSetWMNormalHints,           "XSetWMNormalHints"),
 | 
			
		||||
                       makeSymbolBinding (xStringListToTextProperty,   "XStringListToTextProperty"),
 | 
			
		||||
                       makeSymbolBinding (xSync,                       "XSync"),
 | 
			
		||||
                       makeSymbolBinding (xSynchronize,                "XSynchronize"),
 | 
			
		||||
                       makeSymbolBinding (xTranslateCoordinates,       "XTranslateCoordinates"),
 | 
			
		||||
                       makeSymbolBinding (xrmUniqueQuark,              "XrmUniqueQuark"),
 | 
			
		||||
                       makeSymbolBinding (xUngrabPointer,              "XUngrabPointer"),
 | 
			
		||||
                       makeSymbolBinding (xUngrabServer,               "XUngrabServer"),
 | 
			
		||||
                       makeSymbolBinding (xUnlockDisplay,              "XUnlockDisplay"),
 | 
			
		||||
                       makeSymbolBinding (xUnmapWindow,                "XUnmapWindow"),
 | 
			
		||||
                       makeSymbolBinding (xutf8TextListToTextProperty, "Xutf8TextListToTextProperty"),
 | 
			
		||||
                       makeSymbolBinding (xWarpPointer,                "XWarpPointer")))
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
   #if JUCE_USE_XCURSOR
 | 
			
		||||
    loadSymbols (xcursorLib,
 | 
			
		||||
                 makeSymbolBinding (xcursorImageCreate,          "XcursorImageCreate"),
 | 
			
		||||
                 makeSymbolBinding (xcursorImageLoadCursor,      "XcursorImageLoadCursor"),
 | 
			
		||||
                 makeSymbolBinding (xcursorImageDestroy,         "XcursorImageDestroy"));
 | 
			
		||||
   #endif
 | 
			
		||||
   #if JUCE_USE_XINERAMA
 | 
			
		||||
    loadSymbols (xineramaLib,
 | 
			
		||||
                 makeSymbolBinding (xineramaIsActive,            "XineramaIsActive"),
 | 
			
		||||
                 makeSymbolBinding (xineramaQueryScreens,        "XineramaQueryScreens"));
 | 
			
		||||
   #endif
 | 
			
		||||
   #if JUCE_USE_XRENDER
 | 
			
		||||
    loadSymbols (xrenderLib,
 | 
			
		||||
                 makeSymbolBinding (xRenderQueryVersion,         "XRenderQueryVersion"),
 | 
			
		||||
                 makeSymbolBinding (xRenderFindStandardFormat,   "XRenderFindStandardFormat"),
 | 
			
		||||
                 makeSymbolBinding (xRenderFindFormat,           "XRenderFindFormat"),
 | 
			
		||||
                 makeSymbolBinding (xRenderFindVisualFormat,     "XRenderFindVisualFormat"));
 | 
			
		||||
   #endif
 | 
			
		||||
   #if JUCE_USE_XRANDR
 | 
			
		||||
    loadSymbols (xrandrLib,
 | 
			
		||||
                 makeSymbolBinding (xRRGetScreenResources,       "XRRGetScreenResources"),
 | 
			
		||||
                 makeSymbolBinding (xRRFreeScreenResources,      "XRRFreeScreenResources"),
 | 
			
		||||
                 makeSymbolBinding (xRRGetOutputInfo,            "XRRGetOutputInfo"),
 | 
			
		||||
                 makeSymbolBinding (xRRFreeOutputInfo,           "XRRFreeOutputInfo"),
 | 
			
		||||
                 makeSymbolBinding (xRRGetCrtcInfo,              "XRRGetCrtcInfo"),
 | 
			
		||||
                 makeSymbolBinding (xRRFreeCrtcInfo,             "XRRFreeCrtcInfo"),
 | 
			
		||||
                 makeSymbolBinding (xRRGetOutputPrimary,         "XRRGetOutputPrimary"));
 | 
			
		||||
   #endif
 | 
			
		||||
   #if JUCE_USE_XSHM
 | 
			
		||||
    loadSymbols (xLib, xextLib,
 | 
			
		||||
                 makeSymbolBinding (xShmAttach,                  "XShmAttach"),
 | 
			
		||||
                 makeSymbolBinding (xShmCreateImage,             "XShmCreateImage"),
 | 
			
		||||
                 makeSymbolBinding (xShmDetach,                  "XShmDetach"),
 | 
			
		||||
                 makeSymbolBinding (xShmGetEventBase,            "XShmGetEventBase"),
 | 
			
		||||
                 makeSymbolBinding (xShmPutImage,                "XShmPutImage"),
 | 
			
		||||
                 makeSymbolBinding (xShmQueryVersion,            "XShmQueryVersion"));
 | 
			
		||||
   #endif
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
JUCE_IMPLEMENT_SINGLETON (X11Symbols)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,346 +1,350 @@
 | 
			
		||||
/*
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
   This file is part of the JUCE library.
 | 
			
		||||
   Copyright (c) 2020 - Raw Material Software Limited
 | 
			
		||||
 | 
			
		||||
   JUCE is an open source library subject to commercial or open-source
 | 
			
		||||
   licensing.
 | 
			
		||||
 | 
			
		||||
   By using JUCE, you agree to the terms of both the JUCE 6 End-User License
 | 
			
		||||
   Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
 | 
			
		||||
 | 
			
		||||
   End User License Agreement: www.juce.com/juce-6-licence
 | 
			
		||||
   Privacy Policy: www.juce.com/juce-privacy-policy
 | 
			
		||||
 | 
			
		||||
   Or: You may also use this code under the terms of the GPL v3 (see
 | 
			
		||||
   www.gnu.org/licenses).
 | 
			
		||||
 | 
			
		||||
   JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
 | 
			
		||||
   EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
 | 
			
		||||
   DISCLAIMED.
 | 
			
		||||
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace juce
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
namespace XWindowSystemUtilities
 | 
			
		||||
{
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** A handy struct that uses XLockDisplay and XUnlockDisplay to lock the X server
 | 
			
		||||
        using RAII.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    struct ScopedXLock
 | 
			
		||||
    {
 | 
			
		||||
        ScopedXLock();
 | 
			
		||||
        ~ScopedXLock();
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** Gets a specified window property and stores its associated data, freeing it
 | 
			
		||||
        on deletion.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    struct GetXProperty
 | 
			
		||||
    {
 | 
			
		||||
        GetXProperty (::Display* display, ::Window windowH, Atom property,
 | 
			
		||||
                      long offset, long length, bool shouldDelete, Atom requestedType);
 | 
			
		||||
        ~GetXProperty();
 | 
			
		||||
 | 
			
		||||
        bool success = false;
 | 
			
		||||
        unsigned char* data = nullptr;
 | 
			
		||||
        unsigned long numItems = 0, bytesLeft = 0;
 | 
			
		||||
        Atom actualType;
 | 
			
		||||
        int actualFormat = -1;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** Initialises and stores some atoms for the display.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    struct Atoms
 | 
			
		||||
    {
 | 
			
		||||
        enum ProtocolItems
 | 
			
		||||
        {
 | 
			
		||||
            TAKE_FOCUS = 0,
 | 
			
		||||
            DELETE_WINDOW = 1,
 | 
			
		||||
            PING = 2
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        Atoms() = default;
 | 
			
		||||
        explicit Atoms (::Display*);
 | 
			
		||||
 | 
			
		||||
        static Atom getIfExists (::Display*, const char* name);
 | 
			
		||||
        static Atom getCreating (::Display*, const char* name);
 | 
			
		||||
 | 
			
		||||
        static String getName (::Display*, Atom);
 | 
			
		||||
        static bool isMimeTypeFile (::Display*, Atom);
 | 
			
		||||
 | 
			
		||||
        static constexpr unsigned long DndVersion = 3;
 | 
			
		||||
 | 
			
		||||
        Atom protocols, protocolList[3], changeState, state, userTime, activeWin, pid, windowType, windowState, windowStateHidden,
 | 
			
		||||
             XdndAware, XdndEnter, XdndLeave, XdndPosition, XdndStatus, XdndDrop, XdndFinished, XdndSelection,
 | 
			
		||||
             XdndTypeList, XdndActionList, XdndActionDescription, XdndActionCopy, XdndActionPrivate,
 | 
			
		||||
             XembedMsgType, XembedInfo, allowedActions[5], allowedMimeTypes[4], utf8String, clipboard, targets;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** Represents a setting according to the XSETTINGS specification.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    struct XSetting
 | 
			
		||||
    {
 | 
			
		||||
        enum class Type
 | 
			
		||||
        {
 | 
			
		||||
            integer,
 | 
			
		||||
            string,
 | 
			
		||||
            colour,
 | 
			
		||||
            invalid
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        XSetting() = default;
 | 
			
		||||
 | 
			
		||||
        XSetting (const String& n, int v)            : name (n), type (Type::integer), integerValue (v)  {}
 | 
			
		||||
        XSetting (const String& n, const String& v)  : name (n), type (Type::string),  stringValue (v)   {}
 | 
			
		||||
        XSetting (const String& n, const Colour& v)  : name (n), type (Type::colour),  colourValue (v)   {}
 | 
			
		||||
 | 
			
		||||
        bool isValid() const noexcept  { return type != Type::invalid; }
 | 
			
		||||
 | 
			
		||||
        String name;
 | 
			
		||||
        Type type = Type::invalid;
 | 
			
		||||
 | 
			
		||||
        int integerValue = -1;
 | 
			
		||||
        String stringValue;
 | 
			
		||||
        Colour colourValue;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /** Parses and stores the X11 settings for a display according to the XSETTINGS
 | 
			
		||||
        specification.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    class XSettings
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
        explicit XSettings (::Display*);
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        void update();
 | 
			
		||||
        ::Window getSettingsWindow() const noexcept  { return settingsWindow; }
 | 
			
		||||
 | 
			
		||||
        XSetting getSetting (const String& settingName) const;
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        struct Listener
 | 
			
		||||
        {
 | 
			
		||||
            virtual ~Listener() = default;
 | 
			
		||||
            virtual void settingChanged (const XSetting& settingThatHasChanged) = 0;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        void addListener (Listener* listenerToAdd)        { listeners.add (listenerToAdd); }
 | 
			
		||||
        void removeListener (Listener* listenerToRemove)  { listeners.remove (listenerToRemove); }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        ::Display* display = nullptr;
 | 
			
		||||
        ::Window settingsWindow = None;
 | 
			
		||||
        Atom settingsAtom;
 | 
			
		||||
 | 
			
		||||
        int lastUpdateSerial = -1;
 | 
			
		||||
 | 
			
		||||
        std::unordered_map<String, XSetting> settings;
 | 
			
		||||
        ListenerList<Listener> listeners;
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (XSettings)
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
class LinuxComponentPeer;
 | 
			
		||||
 | 
			
		||||
class XWindowSystem  : public DeletedAtShutdown
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    ::Window createWindow (::Window parentWindow, LinuxComponentPeer*) const;
 | 
			
		||||
    void destroyWindow    (::Window);
 | 
			
		||||
 | 
			
		||||
    void setTitle (::Window, const String&) const;
 | 
			
		||||
    void setIcon (::Window , const Image&) const;
 | 
			
		||||
    void setVisible (::Window, bool shouldBeVisible) const;
 | 
			
		||||
    void setBounds (::Window, Rectangle<int>, bool fullScreen) const;
 | 
			
		||||
 | 
			
		||||
    BorderSize<int> getBorderSize   (::Window) const;
 | 
			
		||||
    Rectangle<int>  getWindowBounds (::Window, ::Window parentWindow);
 | 
			
		||||
    Point<int> getPhysicalParentScreenPosition() const;
 | 
			
		||||
 | 
			
		||||
    bool contains (::Window, Point<int> localPos) const;
 | 
			
		||||
 | 
			
		||||
    void setMinimised (::Window, bool shouldBeMinimised) const;
 | 
			
		||||
    bool isMinimised  (::Window) const;
 | 
			
		||||
 | 
			
		||||
    void setMaximised (::Window, bool shouldBeMinimised) const;
 | 
			
		||||
 | 
			
		||||
    void toFront  (::Window, bool makeActive) const;
 | 
			
		||||
    void toBehind (::Window, ::Window otherWindow) const;
 | 
			
		||||
 | 
			
		||||
    bool isFocused (::Window) const;
 | 
			
		||||
    bool grabFocus (::Window) const;
 | 
			
		||||
 | 
			
		||||
    bool canUseSemiTransparentWindows() const;
 | 
			
		||||
    bool canUseARGBImages() const;
 | 
			
		||||
    bool isDarkModeActive() const;
 | 
			
		||||
 | 
			
		||||
    int getNumPaintsPendingForWindow (::Window);
 | 
			
		||||
    void processPendingPaintsForWindow (::Window);
 | 
			
		||||
    void addPendingPaintForWindow (::Window);
 | 
			
		||||
    void removePendingPaintForWindow (::Window);
 | 
			
		||||
 | 
			
		||||
    Image createImage (bool isSemiTransparentWindow, int width, int height, bool argb) const;
 | 
			
		||||
    void blitToWindow (::Window, Image, Rectangle<int> destinationRect, Rectangle<int> totalRect) const;
 | 
			
		||||
 | 
			
		||||
    void setScreenSaverEnabled (bool enabled) const;
 | 
			
		||||
 | 
			
		||||
    Point<float> getCurrentMousePosition() const;
 | 
			
		||||
    void setMousePosition (Point<float> pos) const;
 | 
			
		||||
 | 
			
		||||
    void* createCustomMouseCursorInfo (const Image&, Point<int> hotspot) const;
 | 
			
		||||
    void deleteMouseCursor (void* cursorHandle) const;
 | 
			
		||||
    void* createStandardMouseCursor (MouseCursor::StandardCursorType) const;
 | 
			
		||||
    void showCursor (::Window, void* cursorHandle) const;
 | 
			
		||||
 | 
			
		||||
    bool isKeyCurrentlyDown (int keyCode) const;
 | 
			
		||||
    ModifierKeys getNativeRealtimeModifiers() const;
 | 
			
		||||
 | 
			
		||||
    Array<Displays::Display> findDisplays (float masterScale) const;
 | 
			
		||||
 | 
			
		||||
    ::Window createKeyProxy (::Window) const;
 | 
			
		||||
    void deleteKeyProxy (::Window) const;
 | 
			
		||||
 | 
			
		||||
    bool externalDragFileInit (LinuxComponentPeer*, const StringArray& files, bool canMove, std::function<void()>&& callback) const;
 | 
			
		||||
    bool externalDragTextInit (LinuxComponentPeer*, const String& text, std::function<void()>&& callback) const;
 | 
			
		||||
 | 
			
		||||
    void copyTextToClipboard (const String&);
 | 
			
		||||
    String getTextFromClipboard() const;
 | 
			
		||||
    String getLocalClipboardContent() const noexcept  { return localClipboardContent; }
 | 
			
		||||
 | 
			
		||||
    ::Display* getDisplay() const noexcept                            { return display; }
 | 
			
		||||
    const XWindowSystemUtilities::Atoms& getAtoms() const noexcept    { return atoms; }
 | 
			
		||||
    XWindowSystemUtilities::XSettings* getXSettings() const noexcept  { return xSettings.get(); }
 | 
			
		||||
 | 
			
		||||
    bool isX11Available() const noexcept  { return xIsAvailable; }
 | 
			
		||||
 | 
			
		||||
    static String getWindowScalingFactorSettingName()  { return "Gdk/WindowScalingFactor"; }
 | 
			
		||||
    static String getThemeNameSettingName()            { return "Net/ThemeName"; }
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    void handleWindowMessage (LinuxComponentPeer*, XEvent&) const;
 | 
			
		||||
    bool isParentWindowOf (::Window, ::Window possibleChild) const;
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    JUCE_DECLARE_SINGLETON (XWindowSystem, false)
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    XWindowSystem();
 | 
			
		||||
    ~XWindowSystem();
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    struct VisualAndDepth
 | 
			
		||||
    {
 | 
			
		||||
        Visual* visual;
 | 
			
		||||
        int depth;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct DisplayVisuals
 | 
			
		||||
    {
 | 
			
		||||
        explicit DisplayVisuals (::Display*);
 | 
			
		||||
 | 
			
		||||
        VisualAndDepth getBestVisualForWindow (bool) const;
 | 
			
		||||
        bool isValid() const noexcept;
 | 
			
		||||
 | 
			
		||||
        Visual* visual16Bit = nullptr;
 | 
			
		||||
        Visual* visual24Bit = nullptr;
 | 
			
		||||
        Visual* visual32Bit = nullptr;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    bool initialiseXDisplay();
 | 
			
		||||
    void destroyXDisplay();
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    ::Window getFocusWindow (::Window) const;
 | 
			
		||||
 | 
			
		||||
    bool isFrontWindow (::Window) const;
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    void xchangeProperty (::Window, Atom, Atom, int, const void*, int) const;
 | 
			
		||||
 | 
			
		||||
    void removeWindowDecorations (::Window) const;
 | 
			
		||||
    void addWindowButtons        (::Window, int) const;
 | 
			
		||||
    void setWindowType           (::Window, int) const;
 | 
			
		||||
 | 
			
		||||
    void initialisePointerMap();
 | 
			
		||||
    void deleteIconPixmaps (::Window) const;
 | 
			
		||||
    void updateModifierMappings() const;
 | 
			
		||||
 | 
			
		||||
    long getUserTime (::Window) const;
 | 
			
		||||
 | 
			
		||||
    void initialiseXSettings();
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    void handleKeyPressEvent        (LinuxComponentPeer*, XKeyEvent&) const;
 | 
			
		||||
    void handleKeyReleaseEvent      (LinuxComponentPeer*, const XKeyEvent&) const;
 | 
			
		||||
    void handleWheelEvent           (LinuxComponentPeer*, const XButtonPressedEvent&, float) const;
 | 
			
		||||
    void handleButtonPressEvent     (LinuxComponentPeer*, const XButtonPressedEvent&, int) const;
 | 
			
		||||
    void handleButtonPressEvent     (LinuxComponentPeer*, const XButtonPressedEvent&) const;
 | 
			
		||||
    void handleButtonReleaseEvent   (LinuxComponentPeer*, const XButtonReleasedEvent&) const;
 | 
			
		||||
    void handleMotionNotifyEvent    (LinuxComponentPeer*, const XPointerMovedEvent&) const;
 | 
			
		||||
    void handleEnterNotifyEvent     (LinuxComponentPeer*, const XEnterWindowEvent&) const;
 | 
			
		||||
    void handleLeaveNotifyEvent     (LinuxComponentPeer*, const XLeaveWindowEvent&) const;
 | 
			
		||||
    void handleFocusInEvent         (LinuxComponentPeer*) const;
 | 
			
		||||
    void handleFocusOutEvent        (LinuxComponentPeer*) const;
 | 
			
		||||
    void handleExposeEvent          (LinuxComponentPeer*, XExposeEvent&) const;
 | 
			
		||||
    void handleConfigureNotifyEvent (LinuxComponentPeer*, XConfigureEvent&) const;
 | 
			
		||||
    void handleGravityNotify        (LinuxComponentPeer*) const;
 | 
			
		||||
    void propertyNotifyEvent        (LinuxComponentPeer*, const XPropertyEvent&) const;
 | 
			
		||||
    void handleMappingNotify        (XMappingEvent&) const;
 | 
			
		||||
    void handleClientMessageEvent   (LinuxComponentPeer*, XClientMessageEvent&, XEvent&) const;
 | 
			
		||||
    void handleXEmbedMessage        (LinuxComponentPeer*, XClientMessageEvent&) const;
 | 
			
		||||
 | 
			
		||||
    void dismissBlockingModals      (LinuxComponentPeer*) const;
 | 
			
		||||
    void dismissBlockingModals      (LinuxComponentPeer*, const XConfigureEvent&) const;
 | 
			
		||||
 | 
			
		||||
    ::Window findTopLevelWindowOf (::Window) const;
 | 
			
		||||
 | 
			
		||||
    static void windowMessageReceive (XEvent&);
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    bool xIsAvailable = false;
 | 
			
		||||
 | 
			
		||||
    XWindowSystemUtilities::Atoms atoms;
 | 
			
		||||
    ::Display* display = nullptr;
 | 
			
		||||
    std::unique_ptr<DisplayVisuals> displayVisuals;
 | 
			
		||||
    std::unique_ptr<XWindowSystemUtilities::XSettings> xSettings;
 | 
			
		||||
 | 
			
		||||
   #if JUCE_USE_XSHM
 | 
			
		||||
    std::map<::Window, int> shmPaintsPendingMap;
 | 
			
		||||
   #endif
 | 
			
		||||
 | 
			
		||||
    int shmCompletionEvent = 0;
 | 
			
		||||
    int pointerMap[5] = {};
 | 
			
		||||
    String localClipboardContent;
 | 
			
		||||
 | 
			
		||||
    Point<int> parentScreenPosition;
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (XWindowSystem)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace juce
 | 
			
		||||
/*
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
   This file is part of the JUCE library.
 | 
			
		||||
   Copyright (c) 2022 - Raw Material Software Limited
 | 
			
		||||
 | 
			
		||||
   JUCE is an open source library subject to commercial or open-source
 | 
			
		||||
   licensing.
 | 
			
		||||
 | 
			
		||||
   By using JUCE, you agree to the terms of both the JUCE 7 End-User License
 | 
			
		||||
   Agreement and JUCE Privacy Policy.
 | 
			
		||||
 | 
			
		||||
   End User License Agreement: www.juce.com/juce-7-licence
 | 
			
		||||
   Privacy Policy: www.juce.com/juce-privacy-policy
 | 
			
		||||
 | 
			
		||||
   Or: You may also use this code under the terms of the GPL v3 (see
 | 
			
		||||
   www.gnu.org/licenses).
 | 
			
		||||
 | 
			
		||||
   JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
 | 
			
		||||
   EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
 | 
			
		||||
   DISCLAIMED.
 | 
			
		||||
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace juce
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
namespace XWindowSystemUtilities
 | 
			
		||||
{
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** A handy struct that uses XLockDisplay and XUnlockDisplay to lock the X server
 | 
			
		||||
        using RAII.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    struct ScopedXLock
 | 
			
		||||
    {
 | 
			
		||||
        ScopedXLock();
 | 
			
		||||
        ~ScopedXLock();
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** Gets a specified window property and stores its associated data, freeing it
 | 
			
		||||
        on deletion.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    struct GetXProperty
 | 
			
		||||
    {
 | 
			
		||||
        GetXProperty (::Display* display, ::Window windowH, Atom property,
 | 
			
		||||
                      long offset, long length, bool shouldDelete, Atom requestedType);
 | 
			
		||||
        ~GetXProperty();
 | 
			
		||||
 | 
			
		||||
        bool success = false;
 | 
			
		||||
        unsigned char* data = nullptr;
 | 
			
		||||
        unsigned long numItems = 0, bytesLeft = 0;
 | 
			
		||||
        Atom actualType;
 | 
			
		||||
        int actualFormat = -1;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** Initialises and stores some atoms for the display.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    struct Atoms
 | 
			
		||||
    {
 | 
			
		||||
        enum ProtocolItems
 | 
			
		||||
        {
 | 
			
		||||
            TAKE_FOCUS = 0,
 | 
			
		||||
            DELETE_WINDOW = 1,
 | 
			
		||||
            PING = 2
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        Atoms() = default;
 | 
			
		||||
        explicit Atoms (::Display*);
 | 
			
		||||
 | 
			
		||||
        static Atom getIfExists (::Display*, const char* name);
 | 
			
		||||
        static Atom getCreating (::Display*, const char* name);
 | 
			
		||||
 | 
			
		||||
        static String getName (::Display*, Atom);
 | 
			
		||||
        static bool isMimeTypeFile (::Display*, Atom);
 | 
			
		||||
 | 
			
		||||
        static constexpr unsigned long DndVersion = 3;
 | 
			
		||||
 | 
			
		||||
        Atom protocols, protocolList[3], changeState, state, userTime, activeWin, pid, windowType, windowState, windowStateHidden,
 | 
			
		||||
             XdndAware, XdndEnter, XdndLeave, XdndPosition, XdndStatus, XdndDrop, XdndFinished, XdndSelection,
 | 
			
		||||
             XdndTypeList, XdndActionList, XdndActionDescription, XdndActionCopy, XdndActionPrivate,
 | 
			
		||||
             XembedMsgType, XembedInfo, allowedActions[5], allowedMimeTypes[4], utf8String, clipboard, targets;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** Represents a setting according to the XSETTINGS specification.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    struct XSetting
 | 
			
		||||
    {
 | 
			
		||||
        enum class Type
 | 
			
		||||
        {
 | 
			
		||||
            integer,
 | 
			
		||||
            string,
 | 
			
		||||
            colour,
 | 
			
		||||
            invalid
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        XSetting() = default;
 | 
			
		||||
 | 
			
		||||
        XSetting (const String& n, int v)            : name (n), type (Type::integer), integerValue (v)  {}
 | 
			
		||||
        XSetting (const String& n, const String& v)  : name (n), type (Type::string),  stringValue (v)   {}
 | 
			
		||||
        XSetting (const String& n, const Colour& v)  : name (n), type (Type::colour),  colourValue (v)   {}
 | 
			
		||||
 | 
			
		||||
        bool isValid() const noexcept  { return type != Type::invalid; }
 | 
			
		||||
 | 
			
		||||
        String name;
 | 
			
		||||
        Type type = Type::invalid;
 | 
			
		||||
 | 
			
		||||
        int integerValue = -1;
 | 
			
		||||
        String stringValue;
 | 
			
		||||
        Colour colourValue;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /** Parses and stores the X11 settings for a display according to the XSETTINGS
 | 
			
		||||
        specification.
 | 
			
		||||
 | 
			
		||||
        @tags{GUI}
 | 
			
		||||
    */
 | 
			
		||||
    class XSettings
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
        static std::unique_ptr<XSettings> createXSettings (::Display*);
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        void update();
 | 
			
		||||
        ::Window getSettingsWindow() const noexcept  { return settingsWindow; }
 | 
			
		||||
 | 
			
		||||
        XSetting getSetting (const String& settingName) const;
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        struct Listener
 | 
			
		||||
        {
 | 
			
		||||
            virtual ~Listener() = default;
 | 
			
		||||
            virtual void settingChanged (const XSetting& settingThatHasChanged) = 0;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        void addListener (Listener* listenerToAdd)        { listeners.add (listenerToAdd); }
 | 
			
		||||
        void removeListener (Listener* listenerToRemove)  { listeners.remove (listenerToRemove); }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        ::Display* display = nullptr;
 | 
			
		||||
        ::Window settingsWindow = None;
 | 
			
		||||
        Atom settingsAtom;
 | 
			
		||||
 | 
			
		||||
        int lastUpdateSerial = -1;
 | 
			
		||||
 | 
			
		||||
        std::unordered_map<String, XSetting> settings;
 | 
			
		||||
        ListenerList<Listener> listeners;
 | 
			
		||||
 | 
			
		||||
        XSettings (::Display*, Atom, ::Window);
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (XSettings)
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
class LinuxComponentPeer;
 | 
			
		||||
 | 
			
		||||
class XWindowSystem  : public DeletedAtShutdown
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    ::Window createWindow (::Window parentWindow, LinuxComponentPeer*) const;
 | 
			
		||||
    void destroyWindow    (::Window);
 | 
			
		||||
 | 
			
		||||
    void setTitle (::Window, const String&) const;
 | 
			
		||||
    void setIcon (::Window , const Image&) const;
 | 
			
		||||
    void setVisible (::Window, bool shouldBeVisible) const;
 | 
			
		||||
    void setBounds (::Window, Rectangle<int>, bool fullScreen) const;
 | 
			
		||||
    void updateConstraints (::Window) const;
 | 
			
		||||
 | 
			
		||||
    ComponentPeer::OptionalBorderSize getBorderSize (::Window) const;
 | 
			
		||||
    Rectangle<int> getWindowBounds (::Window, ::Window parentWindow);
 | 
			
		||||
    Point<int> getPhysicalParentScreenPosition() const;
 | 
			
		||||
 | 
			
		||||
    bool contains (::Window, Point<int> localPos) const;
 | 
			
		||||
 | 
			
		||||
    void setMinimised (::Window, bool shouldBeMinimised) const;
 | 
			
		||||
    bool isMinimised  (::Window) const;
 | 
			
		||||
 | 
			
		||||
    void setMaximised (::Window, bool shouldBeMinimised) const;
 | 
			
		||||
 | 
			
		||||
    void toFront  (::Window, bool makeActive) const;
 | 
			
		||||
    void toBehind (::Window, ::Window otherWindow) const;
 | 
			
		||||
 | 
			
		||||
    bool isFocused (::Window) const;
 | 
			
		||||
    bool grabFocus (::Window) const;
 | 
			
		||||
 | 
			
		||||
    bool canUseSemiTransparentWindows() const;
 | 
			
		||||
    bool canUseARGBImages() const;
 | 
			
		||||
    bool isDarkModeActive() const;
 | 
			
		||||
 | 
			
		||||
    int getNumPaintsPendingForWindow (::Window);
 | 
			
		||||
    void processPendingPaintsForWindow (::Window);
 | 
			
		||||
    void addPendingPaintForWindow (::Window);
 | 
			
		||||
    void removePendingPaintForWindow (::Window);
 | 
			
		||||
 | 
			
		||||
    Image createImage (bool isSemiTransparentWindow, int width, int height, bool argb) const;
 | 
			
		||||
    void blitToWindow (::Window, Image, Rectangle<int> destinationRect, Rectangle<int> totalRect) const;
 | 
			
		||||
 | 
			
		||||
    void setScreenSaverEnabled (bool enabled) const;
 | 
			
		||||
 | 
			
		||||
    Point<float> getCurrentMousePosition() const;
 | 
			
		||||
    void setMousePosition (Point<float> pos) const;
 | 
			
		||||
 | 
			
		||||
    Cursor createCustomMouseCursorInfo (const Image&, Point<int> hotspot) const;
 | 
			
		||||
    void deleteMouseCursor (Cursor cursorHandle) const;
 | 
			
		||||
    Cursor createStandardMouseCursor (MouseCursor::StandardCursorType) const;
 | 
			
		||||
    void showCursor (::Window, Cursor cursorHandle) const;
 | 
			
		||||
 | 
			
		||||
    bool isKeyCurrentlyDown (int keyCode) const;
 | 
			
		||||
    ModifierKeys getNativeRealtimeModifiers() const;
 | 
			
		||||
 | 
			
		||||
    Array<Displays::Display> findDisplays (float masterScale) const;
 | 
			
		||||
 | 
			
		||||
    ::Window createKeyProxy (::Window) const;
 | 
			
		||||
    void deleteKeyProxy (::Window) const;
 | 
			
		||||
 | 
			
		||||
    bool externalDragFileInit (LinuxComponentPeer*, const StringArray& files, bool canMove, std::function<void()>&& callback) const;
 | 
			
		||||
    bool externalDragTextInit (LinuxComponentPeer*, const String& text, std::function<void()>&& callback) const;
 | 
			
		||||
 | 
			
		||||
    void copyTextToClipboard (const String&);
 | 
			
		||||
    String getTextFromClipboard() const;
 | 
			
		||||
    String getLocalClipboardContent() const noexcept  { return localClipboardContent; }
 | 
			
		||||
 | 
			
		||||
    ::Display* getDisplay() const noexcept                            { return display; }
 | 
			
		||||
    const XWindowSystemUtilities::Atoms& getAtoms() const noexcept    { return atoms; }
 | 
			
		||||
    XWindowSystemUtilities::XSettings* getXSettings() const noexcept  { return xSettings.get(); }
 | 
			
		||||
 | 
			
		||||
    bool isX11Available() const noexcept  { return xIsAvailable; }
 | 
			
		||||
 | 
			
		||||
    static String getWindowScalingFactorSettingName()  { return "Gdk/WindowScalingFactor"; }
 | 
			
		||||
    static String getThemeNameSettingName()            { return "Net/ThemeName"; }
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    void handleWindowMessage (LinuxComponentPeer*, XEvent&) const;
 | 
			
		||||
    bool isParentWindowOf (::Window, ::Window possibleChild) const;
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    JUCE_DECLARE_SINGLETON (XWindowSystem, false)
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    XWindowSystem();
 | 
			
		||||
    ~XWindowSystem();
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    struct VisualAndDepth
 | 
			
		||||
    {
 | 
			
		||||
        Visual* visual;
 | 
			
		||||
        int depth;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct DisplayVisuals
 | 
			
		||||
    {
 | 
			
		||||
        explicit DisplayVisuals (::Display*);
 | 
			
		||||
 | 
			
		||||
        VisualAndDepth getBestVisualForWindow (bool) const;
 | 
			
		||||
        bool isValid() const noexcept;
 | 
			
		||||
 | 
			
		||||
        Visual* visual16Bit = nullptr;
 | 
			
		||||
        Visual* visual24Bit = nullptr;
 | 
			
		||||
        Visual* visual32Bit = nullptr;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    bool initialiseXDisplay();
 | 
			
		||||
    void destroyXDisplay();
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    ::Window getFocusWindow (::Window) const;
 | 
			
		||||
 | 
			
		||||
    bool isFrontWindow (::Window) const;
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    void xchangeProperty (::Window, Atom, Atom, int, const void*, int) const;
 | 
			
		||||
 | 
			
		||||
    void removeWindowDecorations (::Window) const;
 | 
			
		||||
    void addWindowButtons        (::Window, int) const;
 | 
			
		||||
    void setWindowType           (::Window, int) const;
 | 
			
		||||
 | 
			
		||||
    void initialisePointerMap();
 | 
			
		||||
    void deleteIconPixmaps (::Window) const;
 | 
			
		||||
    void updateModifierMappings() const;
 | 
			
		||||
 | 
			
		||||
    long getUserTime (::Window) const;
 | 
			
		||||
 | 
			
		||||
    void initialiseXSettings();
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    void handleKeyPressEvent        (LinuxComponentPeer*, XKeyEvent&) const;
 | 
			
		||||
    void handleKeyReleaseEvent      (LinuxComponentPeer*, const XKeyEvent&) const;
 | 
			
		||||
    void handleWheelEvent           (LinuxComponentPeer*, const XButtonPressedEvent&, float) const;
 | 
			
		||||
    void handleButtonPressEvent     (LinuxComponentPeer*, const XButtonPressedEvent&, int) const;
 | 
			
		||||
    void handleButtonPressEvent     (LinuxComponentPeer*, const XButtonPressedEvent&) const;
 | 
			
		||||
    void handleButtonReleaseEvent   (LinuxComponentPeer*, const XButtonReleasedEvent&) const;
 | 
			
		||||
    void handleMotionNotifyEvent    (LinuxComponentPeer*, const XPointerMovedEvent&) const;
 | 
			
		||||
    void handleEnterNotifyEvent     (LinuxComponentPeer*, const XEnterWindowEvent&) const;
 | 
			
		||||
    void handleLeaveNotifyEvent     (LinuxComponentPeer*, const XLeaveWindowEvent&) const;
 | 
			
		||||
    void handleFocusInEvent         (LinuxComponentPeer*) const;
 | 
			
		||||
    void handleFocusOutEvent        (LinuxComponentPeer*) const;
 | 
			
		||||
    void handleExposeEvent          (LinuxComponentPeer*, XExposeEvent&) const;
 | 
			
		||||
    void handleConfigureNotifyEvent (LinuxComponentPeer*, XConfigureEvent&) const;
 | 
			
		||||
    void handleGravityNotify        (LinuxComponentPeer*) const;
 | 
			
		||||
    void propertyNotifyEvent        (LinuxComponentPeer*, const XPropertyEvent&) const;
 | 
			
		||||
    void handleMappingNotify        (XMappingEvent&) const;
 | 
			
		||||
    void handleClientMessageEvent   (LinuxComponentPeer*, XClientMessageEvent&, XEvent&) const;
 | 
			
		||||
    void handleXEmbedMessage        (LinuxComponentPeer*, XClientMessageEvent&) const;
 | 
			
		||||
 | 
			
		||||
    void dismissBlockingModals      (LinuxComponentPeer*) const;
 | 
			
		||||
    void dismissBlockingModals      (LinuxComponentPeer*, const XConfigureEvent&) const;
 | 
			
		||||
    void updateConstraints          (::Window, ComponentPeer&) const;
 | 
			
		||||
 | 
			
		||||
    ::Window findTopLevelWindowOf (::Window) const;
 | 
			
		||||
 | 
			
		||||
    static void windowMessageReceive (XEvent&);
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    bool xIsAvailable = false;
 | 
			
		||||
 | 
			
		||||
    XWindowSystemUtilities::Atoms atoms;
 | 
			
		||||
    ::Display* display = nullptr;
 | 
			
		||||
    std::unique_ptr<DisplayVisuals> displayVisuals;
 | 
			
		||||
    std::unique_ptr<XWindowSystemUtilities::XSettings> xSettings;
 | 
			
		||||
 | 
			
		||||
   #if JUCE_USE_XSHM
 | 
			
		||||
    std::map<::Window, int> shmPaintsPendingMap;
 | 
			
		||||
   #endif
 | 
			
		||||
 | 
			
		||||
    int shmCompletionEvent = 0;
 | 
			
		||||
    int pointerMap[5] = {};
 | 
			
		||||
    String localClipboardContent;
 | 
			
		||||
 | 
			
		||||
    Point<int> parentScreenPosition;
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (XWindowSystem)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace juce
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user