From 01f4074421059006b44b97cda00094a318e63d5f Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 26 Feb 2025 23:03:06 +0800 Subject: [PATCH] hyprctl/layers: print pid for layershell clients (#9468) Adds a `getPID()` fn to layershell to print it in `hyprctl layers` --- src/debug/HyprCtl.cpp | 10 ++++++---- src/desktop/LayerSurface.cpp | 12 ++++++++++++ src/desktop/LayerSurface.hpp | 2 ++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 174eb9322..1d1a9497d 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -479,9 +479,11 @@ static std::string layersRequest(eHyprCtlOutputFormat format, std::string reques "y": {}, "w": {}, "h": {}, - "namespace": "{}" + "namespace": "{}", + "pid": {} }},)#", - (uintptr_t)layer.get(), layer->geometry.x, layer->geometry.y, layer->geometry.width, layer->geometry.height, escapeJSONStrings(layer->szNamespace)); + (uintptr_t)layer.get(), layer->geometry.x, layer->geometry.y, layer->geometry.width, layer->geometry.height, escapeJSONStrings(layer->szNamespace), + layer->getPID()); } trimTrailingComma(result); @@ -512,8 +514,8 @@ static std::string layersRequest(eHyprCtlOutputFormat format, std::string reques result += std::format("\tLayer level {} ({}):\n", layerLevel, levelNames[layerLevel]); for (auto const& layer : level) { - result += std::format("\t\tLayer {:x}: xywh: {} {} {} {}, namespace: {}\n", (uintptr_t)layer.get(), layer->geometry.x, layer->geometry.y, layer->geometry.width, - layer->geometry.height, layer->szNamespace); + result += std::format("\t\tLayer {:x}: xywh: {} {} {} {}, namespace: {}, pid: {}\n", (uintptr_t)layer.get(), layer->geometry.x, layer->geometry.y, + layer->geometry.width, layer->geometry.height, layer->szNamespace, layer->getPID()); } layerLevel++; diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index f4ffaedfc..428dcbbc0 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -584,3 +584,15 @@ int CLayerSurface::popupsCount() { MONITORID CLayerSurface::monitorID() { return monitor ? monitor->ID : MONITOR_INVALID; } + +pid_t CLayerSurface::getPID() { + pid_t PID = -1; + + if (!layerSurface || !layerSurface->surface || !layerSurface->surface->getResource() || !layerSurface->surface->getResource()->resource() || + !layerSurface->surface->getResource()->resource()->client) + return -1; + + wl_client_get_credentials(layerSurface->surface->getResource()->resource()->client, &PID, nullptr, nullptr); + + return PID; +} diff --git a/src/desktop/LayerSurface.hpp b/src/desktop/LayerSurface.hpp index ab259733f..6aba55913 100644 --- a/src/desktop/LayerSurface.hpp +++ b/src/desktop/LayerSurface.hpp @@ -61,6 +61,8 @@ class CLayerSurface { std::string szNamespace = ""; UP popupHead; + pid_t getPID(); + void onDestroy(); void onMap(); void onUnmap();