Browse Source

Allowing the same application to run both windowed and in CLI.

David Piuva 5 years ago
parent
commit
63bded1a0a
2 changed files with 14 additions and 4 deletions
  1. 6 1
      Source/DFPSR/api/guiAPI.cpp
  2. 8 3
      Source/windowManagers/X11Window.cpp

+ 6 - 1
Source/DFPSR/api/guiAPI.cpp

@@ -38,7 +38,12 @@ std::shared_ptr<dsr::BackendWindow> createBackendWindow(const dsr::String& title
 Window dsr::window_create(const String& title, int32_t width, int32_t height) {
 	if (width < 1) { width = 1; }
 	if (height < 1) { height = 1; }
-	return std::make_shared<DsrWindow>(createBackendWindow(title, width, height));
+	std::shared_ptr<dsr::BackendWindow> backend = createBackendWindow(title, width, height);
+	if (backend.get() != nullptr) {
+		return std::make_shared<DsrWindow>(backend);
+	} else {
+		return std::shared_ptr<DsrWindow>();
+	}
 }
 
 Window dsr::window_create_fullscreen(const String& title) {

+ 8 - 3
Source/windowManagers/X11Window.cpp

@@ -605,7 +605,12 @@ void X11Window::showCanvas() {
 }
 
 std::shared_ptr<dsr::BackendWindow> createBackendWindow(const dsr::String& title, int width, int height) {
-	auto backend = std::make_shared<X11Window>(title, width, height);
-	return std::dynamic_pointer_cast<dsr::BackendWindow>(backend);
+	// Check if a display is available for creating a window
+	if (XOpenDisplay(nullptr) != nullptr) {
+		auto backend = std::make_shared<X11Window>(title, width, height);
+		return std::dynamic_pointer_cast<dsr::BackendWindow>(backend);
+	} else {
+		printf("No display detected. Aborting X11 window creation.\n");
+		return std::shared_ptr<dsr::BackendWindow>();
+	}
 }
-