From 315f16d501f38d6bc743fca359d13b655c4a970d Mon Sep 17 00:00:00 2001
From: John Titor <50095635+JohnRTitor@users.noreply.github.com>
Date: Sun, 23 Jun 2024 12:43:17 +0530
Subject: [PATCH 1/5] dbus: import PATH XDG_DATA_DIRS variables into systemd
 and dbus session

---
 src/Compositor.cpp           | 8 ++++----
 src/config/ConfigManager.cpp | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index c607dfb63..2ed1a951a 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -311,10 +311,10 @@ void CCompositor::cleanEnvironment() {
     if (m_sWLRSession) {
         const auto CMD =
 #ifdef USES_SYSTEMD
-            "systemctl --user unset-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME && hash "
+            "systemctl --user unset-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS && hash "
             "dbus-update-activation-environment 2>/dev/null && "
 #endif
-            "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE QT_QPA_PLATFORMTHEME";
+            "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS";
         g_pKeybindManager->spawn(CMD);
     }
 }
@@ -569,10 +569,10 @@ void CCompositor::startCompositor() {
     if (m_sWLRSession /* Session-less Hyprland usually means a nest, don't update the env in that case */) {
         const auto CMD =
 #ifdef USES_SYSTEMD
-            "systemctl --user import-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME && hash "
+            "systemctl --user import-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS && hash "
             "dbus-update-activation-environment 2>/dev/null && "
 #endif
-            "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE QT_QPA_PLATFORMTHEME";
+            "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS";
         g_pKeybindManager->spawn(CMD);
     }
 
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 6a1c896c3..a4a80944d 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -1282,10 +1282,10 @@ void CConfigManager::dispatchExecOnce() {
     if (g_pCompositor->m_sWLRSession)
         handleRawExec("",
 #ifdef USES_SYSTEMD
-                      "systemctl --user import-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME && hash "
+                      "systemctl --user import-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS && hash "
                       "dbus-update-activation-environment 2>/dev/null && "
 #endif
-                      "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE QT_QPA_PLATFORMTHEME");
+                      "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS");
 
     firstExecDispatched = true;
 

From e09addf8dede9a8e7f2dd0e5bb414d3a0d5dc471 Mon Sep 17 00:00:00 2001
From: Mihai Fufezan <mihai@fufexan.net>
Date: Sun, 23 Jun 2024 16:43:53 +0300
Subject: [PATCH 2/5] Workspace.hpp: fix include

---
 src/desktop/Workspace.hpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/desktop/Workspace.hpp b/src/desktop/Workspace.hpp
index ab3907aa8..bb5cd4414 100644
--- a/src/desktop/Workspace.hpp
+++ b/src/desktop/Workspace.hpp
@@ -4,7 +4,7 @@
 #include <string>
 #include "../defines.hpp"
 #include "DesktopTypes.hpp"
-#include "helpers/MiscFunctions.hpp"
+#include "../helpers/MiscFunctions.hpp"
 
 enum eFullscreenMode : int8_t {
     FULLSCREEN_INVALID = -1,

From 8a68199a0ceb2894a5d9cc300961c38123ac0312 Mon Sep 17 00:00:00 2001
From: Vaxry <vaxry@vaxry.net>
Date: Sun, 23 Jun 2024 19:49:48 +0200
Subject: [PATCH 3/5] foreign-toplevel-wlr: fix out-of-range for missing
 monitor resources

fixes #6635
---
 src/protocols/ForeignToplevelWlr.cpp | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp
index 14800393a..2b3783863 100644
--- a/src/protocols/ForeignToplevelWlr.cpp
+++ b/src/protocols/ForeignToplevelWlr.cpp
@@ -124,17 +124,19 @@ void CForeignToplevelHandleWlr::sendMonitor(CMonitor* pMonitor) {
 
     const auto CLIENT = resource->client();
 
-    if (const auto PLASTMONITOR = g_pCompositor->getMonitorFromID(lastMonitorID); PLASTMONITOR) {
+    if (const auto PLASTMONITOR = g_pCompositor->getMonitorFromID(lastMonitorID); PLASTMONITOR && PROTO::outputs.contains(PLASTMONITOR->szName)) {
         const auto OLDRESOURCE = PROTO::outputs.at(PLASTMONITOR->szName)->outputResourceFrom(CLIENT);
 
         if (OLDRESOURCE)
             resource->sendOutputLeave(OLDRESOURCE->getResource()->resource());
     }
 
-    const auto NEWRESOURCE = PROTO::outputs.at(pMonitor->szName)->outputResourceFrom(CLIENT);
+    if (PROTO::outputs.contains(pMonitor->szName)) {
+        const auto NEWRESOURCE = PROTO::outputs.at(pMonitor->szName)->outputResourceFrom(CLIENT);
 
-    if (NEWRESOURCE)
-        resource->sendOutputEnter(NEWRESOURCE->getResource()->resource());
+        if (NEWRESOURCE)
+            resource->sendOutputEnter(NEWRESOURCE->getResource()->resource());
+    }
 
     lastMonitorID = pMonitor->ID;
 }

From cff0123ce62a1f721d3aa2ac0fb58019787a7778 Mon Sep 17 00:00:00 2001
From: Vaxry <vaxry@vaxry.net>
Date: Mon, 24 Jun 2024 23:29:26 +0200
Subject: [PATCH 4/5] wl-compositor: don't send enter to defunct output globals

---
 src/protocols/core/Compositor.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp
index 4bce3f582..691267b07 100644
--- a/src/protocols/core/Compositor.cpp
+++ b/src/protocols/core/Compositor.cpp
@@ -221,6 +221,11 @@ void CWLSurfaceResource::enter(SP<CMonitor> monitor) {
         return;
     }
 
+    if (PROTO::outputs.at(monitor->szName)->isDefunct()) {
+        LOGM(ERR, "enter() called on a defunct output global");
+        return;
+    }
+
     auto output = PROTO::outputs.at(monitor->szName)->outputResourceFrom(pClient);
 
     if (!output || !output->getResource() || !output->getResource()->resource()) {

From 4dd2b5902e770eeaf84820eccfebb5451aedb6a5 Mon Sep 17 00:00:00 2001
From: Vaxry <vaxry@vaxry.net>
Date: Mon, 24 Jun 2024 23:58:10 +0200
Subject: [PATCH 5/5] hyprctl: add a newline after log()

---
 hyprctl/main.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp
index 2bd325e38..45fe9142f 100644
--- a/hyprctl/main.cpp
+++ b/hyprctl/main.cpp
@@ -47,7 +47,7 @@ void log(std::string str) {
     if (quiet)
         return;
 
-    std::cout << str;
+    std::cout << str << "\n";
 }
 
 std::string getRuntimeDir() {