aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoreriedaberrie <[email protected]>2022-12-04 13:03:29 -0800
committerGitHub <[email protected]>2022-12-04 21:03:29 +0000
commit826e35f7a47c9c4cf6cdb0485652836ec1e4b6d9 (patch)
tree6d9032ea1033a3b83ab6f6b4f6f32e9148d4bbb3
parentffc580dda98437fa457d389f231de082df327345 (diff)
downloadHyprland-826e35f7a47c9c4cf6cdb0485652836ec1e4b6d9.tar.gz
Hyprland-826e35f7a47c9c4cf6cdb0485652836ec1e4b6d9.zip
show groupings and swallowing in hyprctl (#1159)
* feat: show groupings and swallowing in hyprctl
-rw-r--r--src/debug/HyprCtl.cpp40
1 files changed, 36 insertions, 4 deletions
diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp
index 22cf3fb0..10a7febd 100644
--- a/src/debug/HyprCtl.cpp
+++ b/src/debug/HyprCtl.cpp
@@ -68,6 +68,34 @@ R"#({
return result;
}
+static std::string getGroupedData(CWindow* w, HyprCtl::eHyprCtlOutputFormat format) {
+ const bool isJson = format == HyprCtl::FORMAT_JSON;
+ if (g_pLayoutManager->getCurrentLayout()->getLayoutName() != "dwindle")
+ return isJson ? "" : "0";
+
+ SLayoutMessageHeader header;
+ header.pWindow = w;
+ const auto groupMembers = std::any_cast<std::deque<CWindow*>>(g_pLayoutManager->getCurrentLayout()->layoutMessage(header, "groupinfo"));
+ if (groupMembers.empty())
+ return isJson ? "" : "0";
+
+ const auto comma = isJson ? ", " : ",";
+ const auto fmt = isJson ? "\"0x%x\"" : "%x";
+ std::ostringstream result;
+
+ bool first = true;
+ for (auto& gw : groupMembers) {
+ if (first)
+ first = false;
+ else
+ result << comma;
+
+ result << getFormat(fmt, gw);
+ }
+
+ return result.str();
+}
+
static std::string getWindowData(CWindow* w, HyprCtl::eHyprCtlOutputFormat format) {
if (format == HyprCtl::FORMAT_JSON) {
return getFormat(
@@ -87,7 +115,9 @@ R"#({
"xwayland": %s,
"pinned": %s,
"fullscreen": %s,
- "fullscreenMode": %i
+ "fullscreenMode": %i,
+ "grouped": [%s],
+ "swallowing": %s
},)#",
w,
(int)w->m_vRealPosition.goalv().x, (int)w->m_vRealPosition.goalv().y,
@@ -101,11 +131,13 @@ R"#({
((int)w->m_bIsX11 == 1 ? "true" : "false"),
(w->m_bPinned ? "true" : "false"),
(w->m_bIsFullscreen ? "true" : "false"),
- (w->m_bIsFullscreen ? (g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_efFullscreenMode : 0) : 0)
+ (w->m_bIsFullscreen ? (g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_efFullscreenMode : 0) : 0),
+ getGroupedData(w, format).c_str(),
+ (w->m_pSwallowed ? getFormat("\"0x%x\"", w->m_pSwallowed).c_str() : "null")
);
} else {
- return getFormat("Window %x -> %s:\n\tat: %i,%i\n\tsize: %i,%i\n\tworkspace: %i (%s)\n\tfloating: %i\n\tmonitor: %i\n\tclass: %s\n\ttitle: %s\n\tpid: %i\n\txwayland: %i\n\tpinned: %i\n\tfullscreen: %i\n\tfullscreenmode: %i\n\n",
- w, w->m_szTitle.c_str(), (int)w->m_vRealPosition.goalv().x, (int)w->m_vRealPosition.goalv().y, (int)w->m_vRealSize.goalv().x, (int)w->m_vRealSize.goalv().y, w->m_iWorkspaceID, (w->m_iWorkspaceID == -1 ? "" : g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_szName.c_str() : std::string("Invalid workspace " + std::to_string(w->m_iWorkspaceID)).c_str()), (int)w->m_bIsFloating, w->m_iMonitorID, g_pXWaylandManager->getAppIDClass(w).c_str(), g_pXWaylandManager->getTitle(w).c_str(), w->getPID(), (int)w->m_bIsX11, (int)w->m_bPinned, (int)w->m_bIsFullscreen, (w->m_bIsFullscreen ? (g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_efFullscreenMode : 0) : 0));
+ return getFormat("Window %x -> %s:\n\tat: %i,%i\n\tsize: %i,%i\n\tworkspace: %i (%s)\n\tfloating: %i\n\tmonitor: %i\n\tclass: %s\n\ttitle: %s\n\tpid: %i\n\txwayland: %i\n\tpinned: %i\n\tfullscreen: %i\n\tfullscreenmode: %i\n\tgrouped: %s\n\tswallowing: %x\n\n",
+ w, w->m_szTitle.c_str(), (int)w->m_vRealPosition.goalv().x, (int)w->m_vRealPosition.goalv().y, (int)w->m_vRealSize.goalv().x, (int)w->m_vRealSize.goalv().y, w->m_iWorkspaceID, (w->m_iWorkspaceID == -1 ? "" : g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_szName.c_str() : std::string("Invalid workspace " + std::to_string(w->m_iWorkspaceID)).c_str()), (int)w->m_bIsFloating, w->m_iMonitorID, g_pXWaylandManager->getAppIDClass(w).c_str(), g_pXWaylandManager->getTitle(w).c_str(), w->getPID(), (int)w->m_bIsX11, (int)w->m_bPinned, (int)w->m_bIsFullscreen, (w->m_bIsFullscreen ? (g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_efFullscreenMode : 0) : 0), getGroupedData(w, format).c_str(), w->m_pSwallowed);
}
}