diff --git a/CMakeLists.txt b/CMakeLists.txt index e3518a74..b7305aa8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,11 @@ IF(LEGACY_RENDERER MATCHES true) add_definitions( -DLEGACY_RENDERER ) ENDIF(LEGACY_RENDERER MATCHES true) +IF(NO_XWAYLAND MATCHES true) + message(STATUS "Using the NO_XWAYLAND flag, disabling XWayland!") + add_definitions( -DNO_XWAYLAND ) +ENDIF(NO_XWAYLAND MATCHES true) + IF(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG) message(STATUS "Configuring Hyprland in Debug with CMake!") ELSE() diff --git a/src/includes.hpp b/src/includes.hpp index 0b77cdb8..d0298c08 100644 --- a/src/includes.hpp +++ b/src/includes.hpp @@ -98,6 +98,12 @@ extern "C" { #include #endif +#ifdef NO_XWAYLAND +#define XWAYLAND false +#else +#define XWAYLAND true +#endif + #include "helpers/Vector2D.hpp" #include "../ext-workspace-unstable-v1-protocol.h" \ No newline at end of file diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 50d20524..f75e611c 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -89,7 +89,11 @@ bool CKeybindManager::handleInternalKeybinds(xkb_keysym_t keysym) { // Dispatchers void CKeybindManager::spawn(std::string args) { - args = "WAYLAND_DISPLAY=" + std::string(g_pCompositor->m_szWLDisplaySocket) + " DISPLAY=" + std::string(g_pXWaylandManager->m_sWLRXWayland->display_name) + " " + args; + if (g_pXWaylandManager->m_sWLRXWayland) + args = "WAYLAND_DISPLAY=" + std::string(g_pCompositor->m_szWLDisplaySocket) + " DISPLAY=" + std::string(g_pXWaylandManager->m_sWLRXWayland->display_name) + " " + args; + else + args = "WAYLAND_DISPLAY=" + std::string(g_pCompositor->m_szWLDisplaySocket) + " " + args; + Debug::log(LOG, "Executing %s", args.c_str()); if (fork() == 0) { execl("/bin/sh", "/bin/sh", "-c", args.c_str(), nullptr); diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index 1c242a78..fcb72ef5 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -3,19 +3,21 @@ #include "../events/Events.hpp" CHyprXWaylandManager::CHyprXWaylandManager() { - m_sWLRXWayland = wlr_xwayland_create(g_pCompositor->m_sWLDisplay, g_pCompositor->m_sWLRCompositor, 1); + if (XWAYLAND) { + m_sWLRXWayland = wlr_xwayland_create(g_pCompositor->m_sWLDisplay, g_pCompositor->m_sWLRCompositor, 1); - if (!m_sWLRXWayland) { - Debug::log(ERR, "Couldn't start up the XWaylandManager because wlr_xwayland_create returned a nullptr!"); - return; + if (!m_sWLRXWayland) { + Debug::log(ERR, "Couldn't start up the XWaylandManager because wlr_xwayland_create returned a nullptr!"); + return; + } + + addWLSignal(&m_sWLRXWayland->events.ready, &Events::listen_readyXWayland, m_sWLRXWayland, "XWayland Manager"); + addWLSignal(&m_sWLRXWayland->events.new_surface, &Events::listen_surfaceXWayland, m_sWLRXWayland, "XWayland Manager"); + + setenv("DISPLAY", m_sWLRXWayland->display_name, 1); + + Debug::log(LOG, "CHyprXWaylandManager started on display %s", m_sWLRXWayland->display_name); } - - addWLSignal(&m_sWLRXWayland->events.ready, &Events::listen_readyXWayland, m_sWLRXWayland, "XWayland Manager"); - addWLSignal(&m_sWLRXWayland->events.new_surface, &Events::listen_surfaceXWayland, m_sWLRXWayland, "XWayland Manager"); - - setenv("DISPLAY", m_sWLRXWayland->display_name, 1); - - Debug::log(LOG, "CHyprXWaylandManager started on display %s", m_sWLRXWayland->display_name); } CHyprXWaylandManager::~CHyprXWaylandManager() { diff --git a/src/managers/XWaylandManager.hpp b/src/managers/XWaylandManager.hpp index 7008d0e8..561865e4 100644 --- a/src/managers/XWaylandManager.hpp +++ b/src/managers/XWaylandManager.hpp @@ -8,7 +8,7 @@ public: CHyprXWaylandManager(); ~CHyprXWaylandManager(); - wlr_xwayland* m_sWLRXWayland; + wlr_xwayland* m_sWLRXWayland = nullptr; wlr_surface* getWindowSurface(CWindow*); void activateSurface(wlr_surface*, bool);