diff --git a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp index 453abc8417..2f0e56a7e1 100644 --- a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp @@ -41,6 +41,9 @@ public: // it's dangerous to create a window on a thread other than the message thread. JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED + if (! XWindowSystem::getInstance()->isX11Available()) + return; + if (isAlwaysOnTop) ++numAlwaysOnTopPeers; @@ -262,12 +265,14 @@ public: //============================================================================== void repaint (const Rectangle& area) override { - repainter->repaint (area.getIntersection (bounds.withZeroOrigin())); + if (repainter != nullptr) + repainter->repaint (area.getIntersection (bounds.withZeroOrigin())); } void performAnyPendingRepaintsNow() override { - repainter->performAnyPendingRepaintsNow(); + if (repainter != nullptr) + repainter->performAnyPendingRepaintsNow(); } void setIcon (const Image& newIcon) override diff --git a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp index 4d0c06a390..f5f7ba28e4 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp +++ b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp @@ -1983,7 +1983,7 @@ bool XWindowSystem::canUseARGBImages() const X11Symbols::getInstance()->xDefaultVisual (display, X11Symbols::getInstance()->xDefaultScreen (display)), 24, ZPixmap, nullptr, &segmentinfo, 64, 64); - canUseARGB = (testImage->bits_per_pixel == 32); + canUseARGB = testImage != nullptr && testImage->bits_per_pixel == 32; X11Symbols::getInstance()->xDestroyImage (testImage); } else @@ -3013,7 +3013,7 @@ bool XWindowSystem::initialiseXDisplay() if (! displayVisuals->isValid()) { Logger::outputDebugString ("ERROR: System doesn't support 32, 24 or 16 bit RGB display.\n"); - Process::terminate(); + return false; } // Setup input event handler diff --git a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h index dda192484d..7a78bec200 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h +++ b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.h @@ -164,6 +164,8 @@ public: ::Display* getDisplay() { return display; } XWindowSystemUtilities::Atoms& getAtoms() { return atoms; } + bool isX11Available() const noexcept { return xIsAvailable; } + //============================================================================== void handleWindowMessage (LinuxComponentPeer*, XEvent&) const; bool isParentWindowOf (::Window, ::Window possibleChild) const;