0032308: Configuration - make Xlib dependency optional
[occt.git] / src / Aspect / Aspect_DisplayConnection.cxx
index 53a7d3a..3cadc20 100755 (executable)
 #include <Aspect_DisplayConnectionDefinitionError.hxx>
 #include <OSD_Environment.hxx>
 
+#if defined(HAVE_XLIB)
+  #include <X11/Xlib.h>
+  #include <X11/Xutil.h>
+  #include <X11/Xatom.h>
+#endif
+
 IMPLEMENT_STANDARD_RTTIEXT(Aspect_DisplayConnection,Standard_Transient)
 
 // =======================================================================
@@ -24,7 +30,7 @@ IMPLEMENT_STANDARD_RTTIEXT(Aspect_DisplayConnection,Standard_Transient)
 // =======================================================================
 Aspect_DisplayConnection::Aspect_DisplayConnection()
 {
-#if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX)) && !defined(__ANDROID__) && !defined(__QNX__) && !defined(__EMSCRIPTEN__)
+#if defined(HAVE_XLIB)
   myDisplay = NULL;
   myDefVisualInfo = NULL;
   myDefFBConfig = NULL;
@@ -41,7 +47,7 @@ Aspect_DisplayConnection::Aspect_DisplayConnection()
 // =======================================================================
 Aspect_DisplayConnection::~Aspect_DisplayConnection()
 {
-#if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX)) && !defined(__ANDROID__) && !defined(__QNX__) && !defined(__EMSCRIPTEN__)
+#if defined(HAVE_XLIB)
   if (myDefVisualInfo != NULL)
   {
     XFree (myDefVisualInfo);
@@ -49,12 +55,11 @@ Aspect_DisplayConnection::~Aspect_DisplayConnection()
   if (myDisplay != NULL
    && myIsOwnDisplay)
   {
-    XCloseDisplay (myDisplay);
+    XCloseDisplay ((Display* )myDisplay);
   }
 #endif
 }
 
-#if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX)) && !defined(__ANDROID__) && !defined(__QNX__) && !defined(__EMSCRIPTEN__)
 // =======================================================================
 // function : Aspect_DisplayConnection
 // purpose  :
@@ -73,7 +78,7 @@ Aspect_DisplayConnection::Aspect_DisplayConnection (const TCollection_AsciiStrin
 // function : Aspect_DisplayConnection
 // purpose  :
 // =======================================================================
-Aspect_DisplayConnection::Aspect_DisplayConnection (Display* theDisplay)
+Aspect_DisplayConnection::Aspect_DisplayConnection (Aspect_XDisplay* theDisplay)
 : myDisplay (NULL),
   myDefVisualInfo (NULL),
   myDefFBConfig (NULL),
@@ -86,12 +91,14 @@ Aspect_DisplayConnection::Aspect_DisplayConnection (Display* theDisplay)
 // function : SetDefaultVisualInfo
 // purpose  :
 // =======================================================================
-void Aspect_DisplayConnection::SetDefaultVisualInfo (XVisualInfo* theVisual,
+void Aspect_DisplayConnection::SetDefaultVisualInfo (Aspect_XVisualInfo* theVisual,
                                                      Aspect_FBConfig theFBConfig)
 {
   if (myDefVisualInfo != NULL)
   {
+  #if defined(HAVE_XLIB)
     XFree (myDefVisualInfo);
+  #endif
   }
   myDefVisualInfo = theVisual;
   myDefFBConfig = theFBConfig;
@@ -101,17 +108,18 @@ void Aspect_DisplayConnection::SetDefaultVisualInfo (XVisualInfo* theVisual,
 // function : Init
 // purpose  :
 // =======================================================================
-void Aspect_DisplayConnection::Init (Display* theDisplay)
+void Aspect_DisplayConnection::Init (Aspect_XDisplay* theDisplay)
 {
+#if defined(HAVE_XLIB)
   if (myDisplay != NULL
    && myIsOwnDisplay)
   {
-    XCloseDisplay (myDisplay);
+    XCloseDisplay ((Display* )myDisplay);
   }
   myIsOwnDisplay = false;
   myAtoms.Clear();
 
-  myDisplay = theDisplay != NULL ? theDisplay : XOpenDisplay (myDisplayName.ToCString());
+  myDisplay = theDisplay != NULL ? theDisplay : (Aspect_XDisplay* )XOpenDisplay (myDisplayName.ToCString());
   if (myDisplay == NULL)
   {
     TCollection_AsciiString aMessage;
@@ -122,18 +130,10 @@ void Aspect_DisplayConnection::Init (Display* theDisplay)
   else
   {
     myIsOwnDisplay = theDisplay == NULL;
-    myAtoms.Bind (Aspect_XA_DELETE_WINDOW, XInternAtom(myDisplay, "WM_DELETE_WINDOW", False));
+    myAtoms.Bind (Aspect_XA_DELETE_WINDOW, (uint64_t )XInternAtom((Display* )myDisplay, "WM_DELETE_WINDOW", False));
   }
-}
-
-// =======================================================================
-// function : GetAtom
-// purpose  :
-// =======================================================================
-Atom Aspect_DisplayConnection::GetAtom (const Aspect_XAtom theAtom) const
-{
-  Atom anAtom = myAtoms.Find(theAtom);
-  return anAtom;
-}
-
+#else
+  myDisplay = theDisplay;
+  myIsOwnDisplay = theDisplay == NULL;
 #endif
+}