Browse Source

Linux: Added better support for minimal X11 environments

tags/2021-05-28
Tom Poole 4 years ago
parent
commit
a05424fd3d
2 changed files with 138 additions and 117 deletions
  1. +95
    -74
      modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp
  2. +43
    -43
      modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h

+ 95
- 74
modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp View File

@@ -55,6 +55,25 @@ namespace
template <typename Data>
std::unique_ptr<Data, XFreeDeleter> makeXFreePtr (Data* raw) { return std::unique_ptr<Data, XFreeDeleter> (raw); }
template <typename Data, typename Deleter>
std::unique_ptr<Data, Deleter> makeDeletedPtr (Data* raw, const Deleter& d) { return std::unique_ptr<Data, Deleter> (raw, d); }
template <typename XValueType>
struct XValueHolder
{
XValueHolder (XValueType&& xv, const std::function<void(XValueType&)>& cleanup)
: value (std::move (xv)), cleanupFunc (cleanup)
{}
~XValueHolder()
{
cleanupFunc (value);
}
XValueType value;
std::function<void(XValueType&)> cleanupFunc;
};
}
//==============================================================================
@@ -173,8 +192,11 @@ XContext windowHandleXContext;
struct MotifWmHints
{
unsigned long flags = 0, functions = 0, decorations = 0, status = 0;
long input_mode = 0;
unsigned long flags = 0;
unsigned long functions = 0;
unsigned long decorations = 0;
long input_mode = 0;
unsigned long status = 0;
};
//=============================== X11 - Error Handling =========================
@@ -336,14 +358,14 @@ static void updateKeyModifiers (int status) noexcept
{
int keyMods = 0;
if ((status & ShiftMask) != 0) keyMods |= ModifierKeys::shiftModifier;
if ((status & ControlMask) != 0) keyMods |= ModifierKeys::ctrlModifier;
if ((status & ShiftMask) != 0) keyMods |= ModifierKeys::shiftModifier;
if ((status & ControlMask) != 0) keyMods |= ModifierKeys::ctrlModifier;
if ((status & Keys::AltMask) != 0) keyMods |= ModifierKeys::altModifier;
ModifierKeys::currentModifiers = ModifierKeys::currentModifiers.withOnlyMouseButtons().withFlags (keyMods);
Keys::numLock = ((status & Keys::NumLockMask) != 0);
Keys::capsLock = ((status & LockMask) != 0);
Keys::capsLock = ((status & LockMask) != 0);
}
static bool updateKeyModifiersFromSym (KeySym sym, bool press) noexcept
@@ -1031,10 +1053,9 @@ namespace PixmapHelpers
X11Symbols::getInstance()->xDefaultRootWindow (display),
width, height, 24);
auto gc = X11Symbols::getInstance()->xCreateGC (display, pixmap, 0, nullptr);
X11Symbols::getInstance()->xPutImage (display, pixmap, gc, ximage.get(), 0, 0, 0, 0, width, height);
X11Symbols::getInstance()->xFreeGC (display, gc);
XValueHolder<GC> gc (X11Symbols::getInstance()->xCreateGC (display, pixmap, 0, nullptr),
[&display] (GC& g) { X11Symbols::getInstance()->xFreeGC (display, g); });
X11Symbols::getInstance()->xPutImage (display, pixmap, gc.value, ximage.get(), 0, 0, 0, 0, width, height);
return pixmap;
}
@@ -1930,7 +1951,8 @@ void* XWindowSystem::createCustomMouseCursorInfo (const Image& image, Point<int>
auto hotspotY = hotspot.y;
#if JUCE_USE_XCURSOR
if (auto* xcImage = X11Symbols::getInstance()->xcursorImageCreate ((int) imageW, (int) imageH))
if (auto xcImage = makeDeletedPtr (X11Symbols::getInstance()->xcursorImageCreate ((int) imageW, (int) imageH),
[] (XcursorImage* i) { X11Symbols::getInstance()->xcursorImageDestroy (i); }))
{
xcImage->xhot = (XcursorDim) hotspotX;
xcImage->yhot = (XcursorDim) hotspotY;
@@ -1940,8 +1962,7 @@ void* XWindowSystem::createCustomMouseCursorInfo (const Image& image, Point<int>
for (int x = 0; x < (int) imageW; ++x)
*dest++ = image.getPixelAt (x, y).getARGB();
auto* result = (void*) X11Symbols::getInstance()->xcursorImageLoadCursor (display, xcImage);
X11Symbols::getInstance()->xcursorImageDestroy (xcImage);
auto* result = (void*) X11Symbols::getInstance()->xcursorImageLoadCursor (display, xcImage.get());
if (result != nullptr)
return result;
@@ -1995,20 +2016,16 @@ void* XWindowSystem::createCustomMouseCursorInfo (const Image& image, Point<int>
}
}
auto sourcePixmap = X11Symbols::getInstance()->xCreatePixmapFromBitmapData (display, root, sourcePlane.getData(), cursorW, cursorH, 0xffff, 0, 1);
auto maskPixmap = X11Symbols::getInstance()->xCreatePixmapFromBitmapData (display, root, maskPlane.getData(), cursorW, cursorH, 0xffff, 0, 1);
auto xFreePixmap = [this] (Pixmap& p) { X11Symbols::getInstance()->xFreePixmap (display, p); };
XValueHolder<Pixmap> sourcePixmap (X11Symbols::getInstance()->xCreatePixmapFromBitmapData (display, root, sourcePlane.getData(), cursorW, cursorH, 0xffff, 0, 1), xFreePixmap);
XValueHolder<Pixmap> maskPixmap (X11Symbols::getInstance()->xCreatePixmapFromBitmapData (display, root, maskPlane.getData(), cursorW, cursorH, 0xffff, 0, 1), xFreePixmap);
XColor white, black;
black.red = black.green = black.blue = 0;
white.red = white.green = white.blue = 0xffff;
auto* result = (void*) X11Symbols::getInstance()->xCreatePixmapCursor (display, sourcePixmap, maskPixmap, &white, &black,
(unsigned int) hotspotX, (unsigned int) hotspotY);
X11Symbols::getInstance()->xFreePixmap (display, sourcePixmap);
X11Symbols::getInstance()->xFreePixmap (display, maskPixmap);
return result;
return (void*) X11Symbols::getInstance()->xCreatePixmapCursor (display, sourcePixmap.value, maskPixmap.value, &white, &black,
(unsigned int) hotspotX, (unsigned int) hotspotY);
}
void XWindowSystem::deleteMouseCursor (void* cursorHandle) const
@@ -2022,14 +2039,13 @@ void XWindowSystem::deleteMouseCursor (void* cursorHandle) const
void* createDraggingHandCursor()
{
static unsigned char dragHandData[] = {
constexpr unsigned char dragHandData[] = {
71,73,70,56,57,97,16,0,16,0,145,2,0,0,0,0,255,255,255,0,0,0,0,0,0,33,249,4,1,0,0,2,0,44,0,0,0,0,16,0,16,0,
0,2,52,148,47,0,200,185,16,130,90,12,74,139,107,84,123,39,132,117,151,116,132,146,248,60,209,138,98,22,203,
114,34,236,37,52,77,217, 247,154,191,119,110,240,193,128,193,95,163,56,60,234,98,135,2,0,59
};
static constexpr auto dragHandDataSize = numElementsInArray (dragHandData);
return CustomMouseCursorInfo (ImageFileFormat::loadFrom (dragHandData, dragHandDataSize), { 8, 7 }).create();
return CustomMouseCursorInfo (ImageFileFormat::loadFrom (dragHandData, (size_t) numElementsInArray (dragHandData)), { 8, 7 }).create();
}
void* XWindowSystem::createStandardMouseCursor (MouseCursor::StandardCursorType type) const
@@ -2064,15 +2080,14 @@ void* XWindowSystem::createStandardMouseCursor (MouseCursor::StandardCursorType
case MouseCursor::CopyingCursor:
{
static unsigned char copyCursorData[] = {
constexpr unsigned char copyCursorData[] = {
71,73,70,56,57,97,21,0,21,0,145,0,0,0,0,0,255,255,255,0,128,128,255,255,255,33,249,4,1,0,0,3,0,44,0,0,0,0,
21,0,21,0,0,2,72,4,134,169,171,16,199,98,11,79,90,71,161,93,56,111,78,133,218,215,137,31,82,154,100,200,
86,91,202,142,12,108,212,87,235,174,15,54,214,126,237,226,37,96,59,141,16,37,18,201,142,157,230,204,51,112,
252,114,147,74,83,5,50,68,147,208,217,16,71,149,252,124,5,0,59,0,0
};
static constexpr auto copyCursorSize = numElementsInArray (copyCursorData);
return CustomMouseCursorInfo (ImageFileFormat::loadFrom (copyCursorData, copyCursorSize), { 1, 3 }).create();
return CustomMouseCursorInfo (ImageFileFormat::loadFrom (copyCursorData, (size_t) numElementsInArray (copyCursorData)), { 1, 3 }).create();
}
case MouseCursor::NumStandardCursorTypes:
@@ -2185,6 +2200,7 @@ Array<Displays::Display> XWindowSystem::findDisplays (float masterScale) const
auto workAreaHints = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WORKAREA");
#if JUCE_USE_XRANDR
if (workAreaHints != None)
{
int major_opcode, first_event, first_error;
@@ -2201,7 +2217,8 @@ Array<Displays::Display> XWindowSystem::findDisplays (float masterScale) const
if (! hasWorkAreaData (prop))
continue;
if (auto* screens = X11Symbols::getInstance()->xRRGetScreenResources (display, rootWindow))
if (auto screens = makeDeletedPtr (X11Symbols::getInstance()->xRRGetScreenResources (display, rootWindow),
[] (XRRScreenResources* srs) { X11Symbols::getInstance()->xRRFreeScreenResources (srs); }))
{
for (int j = 0; j < screens->noutput; ++j)
{
@@ -2212,11 +2229,13 @@ Array<Displays::Display> XWindowSystem::findDisplays (float masterScale) const
if (! mainDisplay)
mainDisplay = screens->outputs[j];
if (auto* output = X11Symbols::getInstance()->xRRGetOutputInfo (display, screens, screens->outputs[j]))
if (auto output = makeDeletedPtr (X11Symbols::getInstance()->xRRGetOutputInfo (display, screens.get(), screens->outputs[j]),
[] (XRROutputInfo* oi) { X11Symbols::getInstance()->xRRFreeOutputInfo (oi); }))
{
if (output->crtc)
{
if (auto* crtc = X11Symbols::getInstance()->xRRGetCrtcInfo (display, screens, output->crtc))
if (auto crtc = makeDeletedPtr (X11Symbols::getInstance()->xRRGetCrtcInfo (display, screens.get(), output->crtc),
[] (XRRCrtcInfo* ci) { X11Symbols::getInstance()->xRRFreeCrtcInfo (ci); }))
{
Displays::Display d;
d.totalArea = { crtc->x, crtc->y, (int) crtc->width, (int) crtc->height };
@@ -2237,17 +2256,11 @@ Array<Displays::Display> XWindowSystem::findDisplays (float masterScale) const
displays.insert (0, d);
else
displays.add (d);
X11Symbols::getInstance()->xRRFreeCrtcInfo (crtc);
}
}
X11Symbols::getInstance()->xRRFreeOutputInfo (output);
}
}
}
X11Symbols::getInstance()->xRRFreeScreenResources (screens);
}
}
@@ -2496,7 +2509,7 @@ void XWindowSystem::removeWindowDecorations (::Window windowH) const
{
jassert (windowH != 0);
Atom hints = XWindowSystemUtilities::Atoms::getIfExists (display, "_MOTIF_WM_HINTS");
auto hints = XWindowSystemUtilities::Atoms::getIfExists (display, "_MOTIF_WM_HINTS");
if (hints != None)
{
@@ -2539,14 +2552,25 @@ void XWindowSystem::removeWindowDecorations (::Window windowH) const
}
}
static void addAtomIfExists (bool condition, const char* key, ::Display* display, std::vector<Atom>& atoms)
{
if (condition)
{
auto atom = XWindowSystemUtilities::Atoms::getIfExists (display, key);
if (atom != None)
atoms.push_back (atom);
}
}
void XWindowSystem::addWindowButtons (::Window windowH, int styleFlags) const
{
jassert (windowH != 0);
XWindowSystemUtilities::ScopedXLock xLock;
Atom hints = XWindowSystemUtilities::Atoms::getIfExists (display, "_MOTIF_WM_HINTS");
auto motifAtom = XWindowSystemUtilities::Atoms::getIfExists (display, "_MOTIF_WM_HINTS");
if (hints != None)
if (motifAtom != None)
{
MotifWmHints motifHints;
zerostruct (motifHints);
@@ -2577,29 +2601,24 @@ void XWindowSystem::addWindowButtons (::Window windowH, int styleFlags) const
motifHints.decorations |= 0x4; /* MWM_DECOR_RESIZEH */
}
xchangeProperty (windowH, hints, hints, 32, &motifHints, 5);
xchangeProperty (windowH, motifAtom, motifAtom, 32, &motifHints, 5);
}
hints = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_ALLOWED_ACTIONS");
auto actionsAtom = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_ALLOWED_ACTIONS");
if (hints != None)
if (actionsAtom != None)
{
Atom netHints [6];
int num = 0;
if ((styleFlags & ComponentPeer::windowIsResizable) != 0)
netHints [num++] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_ACTION_RESIZE");
if ((styleFlags & ComponentPeer::windowHasMaximiseButton) != 0)
netHints [num++] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_ACTION_FULLSCREEN");
std::vector<Atom> netHints;
if ((styleFlags & ComponentPeer::windowHasMinimiseButton) != 0)
netHints [num++] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_ACTION_MINIMIZE");
addAtomIfExists ((styleFlags & ComponentPeer::windowIsResizable) != 0, "_NET_WM_ACTION_RESIZE", display, netHints);
addAtomIfExists ((styleFlags & ComponentPeer::windowHasMaximiseButton) != 0, "_NET_WM_ACTION_FULLSCREEN", display, netHints);
addAtomIfExists ((styleFlags & ComponentPeer::windowHasMinimiseButton) != 0, "_NET_WM_ACTION_MINIMIZE", display, netHints);
addAtomIfExists ((styleFlags & ComponentPeer::windowHasCloseButton) != 0, "_NET_WM_ACTION_CLOSE", display, netHints);
if ((styleFlags & ComponentPeer::windowHasCloseButton) != 0)
netHints [num++] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_ACTION_CLOSE");
auto numHints = (int) netHints.size();
xchangeProperty (windowH, hints, XA_ATOM, 32, &netHints, num);
if (numHints > 0)
xchangeProperty (windowH, actionsAtom, XA_ATOM, 32, netHints.data(), numHints);
}
}
@@ -2607,26 +2626,29 @@ void XWindowSystem::setWindowType (::Window windowH, int styleFlags) const
{
jassert (windowH != 0);
Atom netHints [2];
if ((styleFlags & ComponentPeer::windowIsTemporary) != 0
|| ((styleFlags & ComponentPeer::windowHasDropShadow) == 0 && Desktop::canUseSemiTransparentWindows()))
netHints [0] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_WINDOW_TYPE_COMBO");
else
netHints [0] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_WINDOW_TYPE_NORMAL");
if (atoms.windowType != None)
{
auto hint = (styleFlags & ComponentPeer::windowIsTemporary) != 0
|| ((styleFlags & ComponentPeer::windowHasDropShadow) == 0 && Desktop::canUseSemiTransparentWindows())
? XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_WINDOW_TYPE_COMBO")
: XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_WINDOW_TYPE_NORMAL");
xchangeProperty (windowH, atoms.windowType, XA_ATOM, 32, &netHints, 1);
if (hint != None)
xchangeProperty (windowH, atoms.windowType, XA_ATOM, 32, &hint, 1);
}
int numHints = 0;
if (atoms.windowState != None)
{
std::vector<Atom> netStateHints;
if ((styleFlags & ComponentPeer::windowAppearsOnTaskbar) == 0)
netHints [numHints++] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_STATE_SKIP_TASKBAR");
addAtomIfExists ((styleFlags & ComponentPeer::windowAppearsOnTaskbar) == 0, "_NET_WM_STATE_SKIP_TASKBAR", display, netStateHints);
addAtomIfExists (getPeerFor (windowH)->getComponent().isAlwaysOnTop(), "_NET_WM_STATE_ABOVE", display, netStateHints);
if (getPeerFor (windowH)->getComponent().isAlwaysOnTop())
netHints [numHints++] = XWindowSystemUtilities::Atoms::getIfExists (display, "_NET_WM_STATE_ABOVE");
auto numHints = (int) netStateHints.size();
if (numHints > 0)
xchangeProperty (windowH, atoms.windowState, XA_ATOM, 32, &netHints, numHints);
if (numHints > 0)
xchangeProperty (windowH, atoms.windowState, XA_ATOM, 32, netStateHints.data(), numHints);
}
}
void XWindowSystem::initialisePointerMap()
@@ -2687,7 +2709,8 @@ void XWindowSystem::updateModifierMappings() const
Keys::AltMask = 0;
Keys::NumLockMask = 0;
if (auto* mapping = X11Symbols::getInstance()->xGetModifierMapping (display))
if (auto mapping = makeDeletedPtr (X11Symbols::getInstance()->xGetModifierMapping (display),
[] (XModifierKeymap* mk) { X11Symbols::getInstance()->xFreeModifiermap (mk); }))
{
for (int modifierIdx = 0; modifierIdx < 8; ++modifierIdx)
{
@@ -2701,8 +2724,6 @@ void XWindowSystem::updateModifierMappings() const
Keys::NumLockMask = 1 << modifierIdx;
}
}
X11Symbols::getInstance()->xFreeModifiermap (mapping);
}
}
@@ -2716,7 +2737,7 @@ long XWindowSystem::getUserTime (::Window windowH) const
return 0;
long result = 0;
memcpy (&result, prop.data, sizeof (long));
std::memcpy (&result, prop.data, sizeof (long));
return result;
}


+ 43
- 43
modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h View File

@@ -99,62 +99,62 @@ class XWindowSystem : public DeletedAtShutdown
{
public:
//==============================================================================
::Window createWindow (::Window parentWindow, LinuxComponentPeer* peer) const;
void destroyWindow (::Window windowH);
::Window createWindow (::Window parentWindow, LinuxComponentPeer*) const;
void destroyWindow (::Window);
void setTitle (::Window windowH, const String& title) const;
void setIcon (::Window windowH, const Image& newIcon) const;
void setVisible (::Window windowH, bool shouldBeVisible) const;
void setBounds (::Window windowH, Rectangle<int> newBounds, bool fullScreen) const;
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 windowH) const;
Rectangle<int> getWindowBounds (::Window windowH, ::Window parentWindow);
BorderSize<int> getBorderSize (::Window) const;
Rectangle<int> getWindowBounds (::Window, ::Window parentWindow);
Point<int> getParentScreenPosition() const;
bool contains (::Window windowH, Point<int> localPos) const;
bool contains (::Window, Point<int> localPos) const;
void setMinimised (::Window windowH, bool shouldBeMinimised) const;
bool isMinimised (::Window windowH) const;
void setMinimised (::Window, bool shouldBeMinimised) const;
bool isMinimised (::Window) const;
void toFront (::Window windowH, bool makeActive) const;
void toBehind (::Window windowH, ::Window otherWindow) const;
void toFront (::Window, bool makeActive) const;
void toBehind (::Window, ::Window otherWindow) const;
bool isFocused (::Window windowH) const;
bool grabFocus (::Window windowH) const;
bool isFocused (::Window) const;
bool grabFocus (::Window) const;
bool canUseSemiTransparentWindows() const;
bool canUseARGBImages() const;
int getNumPaintsPendingForWindow (::Window windowH);
void processPendingPaintsForWindow (::Window windowH);
void addPendingPaintForWindow (::Window windowH);
void removePendingPaintForWindow (::Window windowH);
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 windowH, Image image, Rectangle<int> destinationRect, Rectangle<int> totalRect) 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& image, Point<int> hotspot) const;
void* createCustomMouseCursorInfo (const Image&, Point<int> hotspot) const;
void deleteMouseCursor (void* cursorHandle) const;
void* createStandardMouseCursor (MouseCursor::StandardCursorType type) const;
void showCursor (::Window windowH, 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 windowH) const;
void deleteKeyProxy (::Window keyProxy) const;
::Window createKeyProxy (::Window) const;
void deleteKeyProxy (::Window) const;
bool externalDragFileInit (LinuxComponentPeer* peer, const StringArray& files, bool canMove, std::function<void()>&& callback) const;
bool externalDragTextInit (LinuxComponentPeer* peer, const String& text, std::function<void()>&& callback) 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& clipText);
void copyTextToClipboard (const String&);
String getTextFromClipboard() const;
String getLocalClipboardContent() const { return localClipboardContent; }
@@ -163,8 +163,8 @@ public:
XWindowSystemUtilities::Atoms& getAtoms() { return atoms; }
//==============================================================================
void handleWindowMessage (LinuxComponentPeer* peer, XEvent& event) const;
bool isParentWindowOf (::Window windowH, ::Window possibleChild) const;
void handleWindowMessage (LinuxComponentPeer*, XEvent&) const;
bool isParentWindowOf (::Window, ::Window possibleChild) const;
//==============================================================================
JUCE_DECLARE_SINGLETON (XWindowSystem, false)
@@ -182,9 +182,9 @@ private:
struct DisplayVisuals
{
explicit DisplayVisuals (::Display* d);
explicit DisplayVisuals (::Display*);
VisualAndDepth getBestVisualForWindow (bool isSemiTransparent) const;
VisualAndDepth getBestVisualForWindow (bool) const;
bool isValid() const noexcept;
Visual* visual16Bit = nullptr;
@@ -196,22 +196,22 @@ private:
void destroyXDisplay();
//==============================================================================
::Window getFocusWindow (::Window windowH) const;
::Window getFocusWindow (::Window) const;
bool isFrontWindow (::Window windowH) const;
bool isFrontWindow (::Window) const;
//==============================================================================
void xchangeProperty (::Window windowH, Atom property, Atom type, int format, const void* data, int numElements) const;
void xchangeProperty (::Window, Atom, Atom, int, const void*, int) const;
void removeWindowDecorations (::Window windowH) const;
void addWindowButtons (::Window windowH, int styleFlags) const;
void setWindowType (::Window windowH, int styleFlags) const;
void removeWindowDecorations (::Window) const;
void addWindowButtons (::Window, int) const;
void setWindowType (::Window, int) const;
void initialisePointerMap();
void deleteIconPixmaps (::Window windowH) const;
void deleteIconPixmaps (::Window) const;
void updateModifierMappings() const;
long getUserTime (::Window windowH) const;
long getUserTime (::Window) const;
//==============================================================================
void handleKeyPressEvent (LinuxComponentPeer*, XKeyEvent&) const;
@@ -228,13 +228,13 @@ private:
void handleExposeEvent (LinuxComponentPeer*, XExposeEvent&) const;
void handleConfigureNotifyEvent (LinuxComponentPeer*, XConfigureEvent&) const;
void handleGravityNotify (LinuxComponentPeer*) const;
void propertyNotifyEvent (LinuxComponentPeer*, const XPropertyEvent& ) 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* peer) const;
void dismissBlockingModals (LinuxComponentPeer* peer, const XConfigureEvent&) const;
void dismissBlockingModals (LinuxComponentPeer*) const;
void dismissBlockingModals (LinuxComponentPeer*, const XConfigureEvent&) const;
static void windowMessageReceive (XEvent&);


Loading…
Cancel
Save