diff --git a/README.md b/README.md index e04bf79..9a4faf1 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,9 @@ plugin { # offset from group split direction when only one window is in a group group_inset = # default: 10 + # scale factor of windows on the special workspace + special_scale_factor = # default: 0.8 + # tab group settings tabs { # height of the tab bar diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp index 12a67ab..d459ba1 100644 --- a/src/Hy3Layout.cpp +++ b/src/Hy3Layout.cpp @@ -87,8 +87,11 @@ void Hy3Layout::onWindowCreatedTiling(CWindow* window) { Hy3Node* opening_into; Hy3Node* opening_after = nullptr; - if (monitor->activeWorkspace != -1) { - auto* root = this->getWorkspaceRootGroup(monitor->activeWorkspace); + int specialWorkspaceID = monitor->specialWorkspaceID; + int workspace_id = specialWorkspaceID ? specialWorkspaceID : monitor->activeWorkspace; + + if (workspace_id != -1) { + auto* root = this->getWorkspaceRootGroup(workspace_id); if (root != nullptr) { opening_after = root->getFocusedNode(); @@ -1368,7 +1371,7 @@ void Hy3Layout::applyNodeDataToWindow(Hy3Node* node, bool no_animation) { ); } - if (monitor == nullptr) { + if (!g_pCompositor->isWorkspaceSpecial(node->workspace_id) && monitor == nullptr) { Debug::log(ERR, "Orphaned Node %x (workspace ID: %i)!!", node, node->workspace_id); errorNotif(); return; @@ -1426,6 +1429,14 @@ void Hy3Layout::applyNodeDataToWindow(Hy3Node* node, bool no_animation) { calcPos = calcPos + reserved_area.topLeft; calcSize = calcSize - (reserved_area.topLeft - reserved_area.bottomRight); + if (g_pCompositor->isWorkspaceSpecial(window->m_iWorkspaceID)) { + // adjust for special workspaces + static const auto* scalefactor + = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hy3:special_scale_factor")->floatValue; + calcPos = calcPos + (calcSize - calcSize * *scalefactor) / 2.f; + calcSize = calcSize * *scalefactor; + } + window->m_vRealPosition = calcPos; window->m_vRealSize = calcSize; Debug::log(LOG, "Set size (%f %f)", calcSize.x, calcSize.y); diff --git a/src/dispatchers.cpp b/src/dispatchers.cpp index a1a6da1..fc3be87 100644 --- a/src/dispatchers.cpp +++ b/src/dispatchers.cpp @@ -8,8 +8,9 @@ int workspace_for_action() { if (g_pLayoutManager->getCurrentLayout() != g_Hy3Layout.get()) return -1; - - int workspace_id = g_pCompositor->m_pLastMonitor->activeWorkspace; + int specialWorkspaceID = g_pCompositor->m_pLastMonitor->specialWorkspaceID; + int workspace_id + = specialWorkspaceID ? specialWorkspaceID : g_pCompositor->m_pLastMonitor->activeWorkspace; if (workspace_id == -1) return -1; auto* workspace = g_pCompositor->getWorkspaceByID(workspace_id); diff --git a/src/main.cpp b/src/main.cpp index 5185f2e..a8f25b0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,6 +21,7 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) { CONF("no_gaps_when_only", int, 0); CONF("node_collapse_policy", int, 2); CONF("group_inset", int, 10); + CONF("special_scale_factor", float, 0.8); // tabs CONF("tabs:height", int, 15);